Iniciando um STAThread em C#
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
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();