tipo threadstateexception threading stathread excepción español controlada c# .net-attributes

c# - threadstateexception - ¿Qué hace[STAThread]?



excepción no controlada del tipo system threading threadstateexception en system windows forms dll (3)

Estoy aprendiendo C # 3.5 y quiero saber qué hace [STAThread] en nuestros programas.


El atributo STAThreadAttribute marca un hilo para usar el departamento COM de un solo hilo si se necesita COM. De forma predeterminada, .NET no inicializará COM en absoluto. Es solo cuando se necesita COM, como cuando se crea un objeto COM o un control de COM o cuando se necesita arrastrar y soltar, se inicializa COM. Cuando eso sucede, .NET llama a la función CoInitializeEx subyacente, que toma un indicador que indica si se debe unir el hilo a un apartamento de subproceso múltiple o único.

Lea más información here (Archivado, junio de 2009)

y

¿Por qué se requiere STAThread?


El STAThreadAttribute es esencialmente un requisito para que la bomba de mensajes de Windows se comunique con los componentes COM. Aunque los formularios Windows Forms principales no usan COM, muchos componentes del sistema operativo, como los diálogos del sistema, usan esta tecnología.

MSDN explica la razón con un poco más de detalle:

STAThreadAttribute indica que el modelo de subprocesos COM para la aplicación es un apartamento de un solo subproceso. Este atributo debe estar presente en el punto de entrada de cualquier aplicación que use Windows Forms; si se omite, es posible que los componentes de Windows no funcionen correctamente. Si el atributo no está presente, la aplicación utiliza el modelo de apartamento de multiproceso, que no es compatible con Windows Forms.

Esta publicación del blog ( ¿Por qué se requiere STAThread? ) También explica el requisito bastante bien. Si desea una vista más detallada de cómo funciona el modelo de subprocesos en el nivel CLR, consulte este artículo de la Revista MSDN de junio de 2004 (Archivado, abril de 2009).


Le dice al compilador que estás en un modelo de Single Thread Apartment. Esto es una cosa malvada de COM, se usa generalmente para formularios Windows Forms (GUI), ya que utiliza Win32 para su dibujo, que se implementa como STA. Si está utilizando algo que es el modelo STA de varios subprocesos, obtendrá objetos dañados.

Esta es la razón por la que tienes que invocar en la Gui desde otro hilo (si has hecho alguna codificación de formularios).

Básicamente, no se preocupe por eso, solo acepte que los hilos de la GUI de Windows deben estar marcados como STA; de lo contrario, sucederán cosas extrañas.