3. ¿Qué sucede si elimina este atributo?
Acabo de agregar un ejemplo simple que demuestra el problema.
Creé la aplicación WinForms simple con un botón y un OpenFileDialog. En el botón, haga clic en Ejecutar un hilo que muestra OpenFileDialog. Lanzo la aplicación con y sin STAThread y los resultados de hacer clic en el botón son los mismos: arroja la excepción "Operación entre hilos no válida: Control 'Form1' al que se accede desde un hilo que no sea el hilo en el que se creó". Parece que no hay diferencia. Pero no.
Entonces cambió muestra la OpenFileDialog mediante una llamada al método siguiente:
private void ShowOFD()
{
if (InvokeRequired)
{
BeginInvoke(new Action(ShowOFD));
return;
}
openFileDialog1.ShowDialog(this);
}
Con STAThread funciona bien como se esperaba. Sin STAThread arroja la excepción: "El hilo actual debe configurarse en modo de apartamento de una sola rosca (STA) antes de que se puedan realizar llamadas OLE. Asegúrese de que su función Principal tenga marcado STAThreadAttribute. Esta excepción solo se genera si se conecta un depurador al proceso ".
Luego ejecuto la aplicación varias veces sin depurador (separado de Visual Studio). Una vez que la aplicación simplemente cerró silenciosamente, en otra ocasión la aplicación se cerró con el mensaje "vshost ha dejado de funcionar"
Posible duplicado: http://stackoverflow.com/questions/102437/why-do-all-winforms-programs-require-the-stathread-attribute –
@Cody: Sí, lo siento, no lo vi, pero en mi humilde opinión esta respuesta es mucho mejor que la otra. –
Sí, eso es justo. No voté para cerrar porque esas respuestas no fueron fantásticas. El conocimiento más importante para obtener de esa pregunta es este enlace: http://blogs.msdn.com/b/jfoscoding/archive/2005/04/07/406341.aspx –