Pergunta

Ainda sou meio novo em C# e, especialmente, em threading em C#.Estou tentando iniciar uma função que requer um único apartamento encadeado (STAThread)

Mas não estou conseguindo compilar o seguinte código:

A função tem a seguinte aparência em uma classe separada chamada MyClass:

internal static string DoX(string n, string p)
        {
            // does some work here that requires STAThread
        }

Eu tentei o atributo [STAThread] no topo da função, mas isso não funciona.

Então, estou tentando criar um novo Thread da seguinte maneira:

 Thread t = new Thread(new ThreadStart(MyClass.DoX));

mas isso não será compilado (o melhor método sobrecarregado possui erro de argumentos inválidos).No entanto, o exemplo online é muito semelhante (exemplo aqui)O que estou fazendo de errado e como posso simplesmente executar uma função em um novo thread STA?

Obrigado

Foi útil?

Solução

Thread thread = new Thread(() => MyClass.DoX("abc", "def"));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

Se precisar do valor, você pode "capturá-lo" de volta em uma variável, mas observe que a variável não terá o valor até o final do outro thread:

int retVal = 0;
Thread thread = new Thread(() => {
    retVal = MyClass.DoX("abc", "def");
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

ou talvez mais simples:

Thread thread = new Thread(() => {
    int retVal = MyClass.DoX("abc", "def");
    // do something with retVal
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top