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

¿Fue útil?

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();

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top