Comenzando un Stathread en C #
Pregunta
Todavía soy un poco nuevo en C #, y especialmente en roscado en C #. Estoy tratando de iniciar una función que requiere un solo apartamento roscado ( Stathread )
Pero no puedo compilar el siguiente código:
La función se ve como sigue en una clase separada llamada MyClass
:
internal static string DoX(string n, string p)
{
// does some work here that requires STAThread
}
He intentado el atributo [Stathread] en la parte superior de la función, pero eso no funciona.
Así que estoy tratando de crear un nuevo hilo de la siguiente manera:
Thread t = new Thread(new ThreadStart(MyClass.DoX));
Pero esto no se compilará (el mejor método sobrecargado tiene un error de argumentos no válidos).Sin embargo, el ejemplo en línea es muy similar (ejemplo aquí) ¿Qué estoy haciendo mal y cómo puedo simplemente hacer una función en un nuevo hilo STA?
gracias
Solución
Thread thread = new Thread(() => MyClass.DoX("abc", "def"));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
Si necesita el valor, puede "capturar" que vuelva a la variable, pero tenga en cuenta que la variable no tendrá el valor hasta el final del otro hilo:
int retVal = 0;
Thread thread = new Thread(() => {
retVal = MyClass.DoX("abc", "def");
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
o tal vez más sencillo:
Thread thread = new Thread(() => {
int retVal = MyClass.DoX("abc", "def");
// do something with retVal
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();