Del artículo de MSDN en STAThread:STAThread y multithreading
Indica que el modelo de subprocesos COM de una aplicación es el apartamento de un único subproceso (STA).
(Como referencia, eso es the entire article.)
de un solo subproceso apartamento ... OK, que se fue por encima de mi cabeza. Además, leí en alguna parte que a menos que tu aplicación use interoperabilidad COM, este atributo en realidad no hace nada en absoluto. Entonces, ¿qué es exactamente lo que hace, y cómo afecta esto a las aplicaciones multiproceso? ¿Deben las aplicaciones multiproceso (que incluye cualquier cosa desde cualquier persona que usa Timer
s a llamadas a métodos asíncronos, no solo grupos de subprocesos y similares) usar MTAThread, incluso si es 'solo para estar seguro'? ¿Qué hace STAThread y MTAThread en realidad?
Eso está demasiado simplificado. Los objetos multiproceso se pueden ejecutar en cualquier hilo. Los objetos con subprocesos solo se pueden ejecutar en el departamento en el que se crearon. –
Una llamada desde un objeto STA en un hilo STA a un objeto MTA se convertirá en un hilo MTA (a menos que el objeto MTA implemente el marcador general) . Como dije, los detalles pueden complicarse. (Trabajé en el equipo COM durante varios años * sonrisa *) – Bruce
Algunas veces debe tener esto en cuenta incluso si no está utilizando COM directamente. Un subproceso debe utilizar el modelo de Apartamento de subproceso único si muestra ventanas gráficas. Esta es la razón por la cual [STAThread] siempre se muestra en la parte superior del método principal en una aplicación de formularios de Windows. –