Pregunta

Estoy aprendiendo C # 3.5 y quiero saber lo que hace [STAThread] en nuestros programas?

¿Fue útil?

Solución

El STAThreadAttribute es esencialmente un requisito para el suministro de mensajes de Windows para comunicarse con los componentes COM. Aunque las formas núcleo de Windows no utiliza COM, muchos componentes del sistema operativo tales como los diálogos del sistema que usan esta tecnología.

MSDN explica la razón en algo más detalle:

  

indica que el STAThreadAttribute   modelo de subprocesos COM para el   aplicación es de un solo roscado   Departamento. Este atributo debe ser   presente en el punto de entrada de cualquier   aplicación que utiliza Windows Forms;   Si se omite, el de Windows   componentes podrían no funcionar correctamente.   Si el atributo no está presente, el   aplicación utiliza el multiproceso   modelo de apartamento, que no es   compatible para Windows Forms.

Esta entrada de blog ( ¿Por qué se requiere STAThread? ) también explica el requisito bastante bien. Si quieres una vista más detallada de cómo el modelo de hilos trabaja a nivel de CLR, consulte este artículo MSDN Magazine entre junio de 2004 (Archivado, abril de 2009).

Otros consejos

Se le dice al compilador que estás en un modelo único hilo Apartamento. Esto es una cosa COM mal, por lo general es utilizado para Windows Forms (de interfaz gráfica de usuario) como Win32 que utiliza para su elaboración, que se implementa como STA. Si está utilizando algo que es modelo STA desde varios subprocesos entonces usted consigue los objetos dañados.

Esta es la razón por lo que tiene que invocar a la GUI desde otro hilo (si has hecho cualquier forma de codificación).

Básicamente no se preocupan por él, sólo aceptan que los hilos de Windows GUI deben ser marcados como sucede STA cosas de otro modo extraño.

  

El STAThreadAttribute marca un hilo   utilizar el único subproceso COM   Apartamento si se necesita COM. Por   De manera predeterminada, .NET no se inicializará en COM   todas. Es sólo cuando se necesita COM,   como cuando un objeto COM o Control COM   se crea o cuando arrastrar 'n' gota es   es necesario, que se inicializa COM. Cuando   eso sucede, .NET llama al   subyacente a la función CoInitializeEx,   que tiene una bandera que indica si   para unirse al hilo para un multi-hilo   o apartamento único subproceso.

Más información aquí (Archivado, junio de 2009)

y

¿Por qué se requiere STAThread?

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