Lo que sí [STAThread] hacer?
-
20-09-2019 - |
Pregunta
Estoy aprendiendo C # 3.5 y quiero saber lo que hace [STAThread]
en nuestros programas?
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