¿Qué hace [STAThread]?

Resuelto odiseh asked hace 15 años • 3 respuestas

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

odiseh avatar Sep 01 '09 14:09 odiseh
Aceptado

Es STAThreadAttributeesencialmente un requisito para que la bomba de mensajes de Windows se comunique con los componentes COM. Aunque el núcleo de Windows Forms no utiliza COM, muchos componentes del sistema operativo, como los cuadros de diálogo del sistema, sí utilizan esta tecnología.

MSDN explica el motivo con un poco más de detalle:

STAThreadAttribute indica que el modelo de subprocesos COM para la aplicación es un apartamento de subproceso único. Este atributo debe estar presente en el punto de entrada de cualquier aplicación que utilice 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 multiproceso, que no es compatible con Windows Forms.

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

Noldorin avatar Sep 01 '2009 07:09 Noldorin

Le dice al compilador que estás en un modelo de apartamento de un solo subproceso. Esto es algo maligno de COM, generalmente se usa para Windows Forms (GUI), ya que usa Win32 para dibujar COM para arrastrar y soltar componentes COM (gracias @AnthonyWJones), que se implementa como STA. Si está utilizando algo que es el modelo STA de múltiples subprocesos, obtendrá objetos dañados.

Es por eso que debe invocar la Gui desde otro hilo (si ha codificado algún formulario).

Básicamente, no se preocupe por eso, simplemente acepte que los subprocesos de la GUI de Windows deben marcarse como STA, de lo contrario sucederán cosas raras.

Spence avatar Sep 01 '2009 07:09 Spence