Del artículo de MSDN sobre STAThread:
Indica que el modelo de subprocesos COM para una aplicación es un apartamento de un solo subproceso (STA).
(Como referencia, ese es el artículo completo ).
Apartamento de un solo hilo ... OK, eso pasó por encima de mi cabeza. Además, leí en alguna parte que, a menos que su aplicación use la interoperabilidad COM, este atributo en realidad no hace nada en absoluto. Entonces, ¿qué hace exactamente y cómo afecta a las aplicaciones multiproceso? ¿Deberían las aplicaciones multiproceso (que incluyen cualquier cosa, desde cualquiera que use Timer
s hasta llamadas a métodos asincrónicos, no solo grupos de subprocesos y similares) usar MTAThread, incluso si es 'solo para estar seguro'? ¿Qué hacen realmente STAThread y MTAThread?
fuente
Lo que hace eso se asegura que
CoInitialize
se llama especificando COINIT_APARTMENTTHREADED como parámetro. Si no utiliza ningún componente COM o controles ActiveX, no tendrá ningún efecto en usted. Si lo hace, entonces es crucial.Los controles que son subprocesos de apartamentos son efectivamente de un solo subproceso, las llamadas realizadas a ellos solo se pueden procesar en el departamento en el que se crearon.
Algunos detalles más de MSDN:
fuente
CoInitialize()
en respuesta alSTAThread
atributo /ApartmentState
? Nota: El artículo sobre MSDN está aquí: función CoInitializeEx .CoInitialize()
internamente? Seguí el atributo STAThread hasta allí, pero el rastro se ha enfriado (no puedo encontrar la fuenteThread::SetApartment
). ¿La clase Thread de thread.h (el COM thread.h) está documentada en algún lugar? ¿Es MFC, ATL o algo más?STAThread se escribe antes que la función Main de un proyecto de GUI de C #. No hace nada más que permite que el programa cree un solo hilo.
fuente