2010-11-16 9 views

Respuesta

15

Un hilo que crea cualquier ventana debe siempre crear un apartamento de subproceso único. Una STA proporciona garantías de enhebrado para cualquier objeto COM que no sea seguro para subprocesos. Muy pocos lo son La infraestructura COM garantiza que los métodos de dicho objeto se invoquen siempre desde el hilo correcto, coordinando la llamada si es necesario. Muy similar a Control.Begin/Invoke() pero hecho automáticamente sin ninguna codificación.

Varias instalaciones de Windows confían en esa garantía. En particular, el Portapapeles, Arrastrar y Soltar y los cuadros de diálogo del shell (como OpenFileDialog) no funcionarán correctamente sin él. Y muchos controles ActiveX, WebBrowser es uno común que usará en un proyecto de Winforms. Hacer que su UI enhebre un hilo de MTA causa un diagnóstico difícil de falla, siendo el punto muerto un problema común. O una excepción rápida cuando el contenedor .NET para el componente comprueba dos veces que se creó en un STA.

6

No se puede usar MTA en WinForms ya que la mayoría de los controles de Windows no funcionarán ya que no son compatibles con MTA. Por lo tanto, siempre use MTA a menos que el código de su aplicación haga llamadas a los objetos STA COM. Por ejemplo, en ASP.NET, MTA es el modelo predeterminado.

Cuestiones relacionadas