2009-08-18 8 views

Respuesta

32

Esto es más un requisito de Windows que uno de WPF, y vuelve al diseño original de los formularios y controles de Windows, anteriores a .NET.

STATread significa "Single-Threaded Apartments", que hace referencia al modelo de subprocesamiento utilizado por el subproceso actual (principal). El modelo de subprocesamiento en uso dicta cómo otras aplicaciones .NET y COM hablarán con su aplicación (e inherentemente, sus subprocesos). El modelo de aplicación de subproceso único requiere que ningún objeto individual "viva" más de un hilo STA a la vez, frente al modelo de subprocesos MTA; y permite el paso de punteros a los datos a través de los apartamentos solo mediante clasificación como objeto.

Básicamente, con la declaración [STAThread], otras aplicaciones sabrán cuál es la política de su hilo al enviar sus datos. El modelo STA es el modelo de subprocesamiento más común para subprocesos/aplicaciones de Windows; pero a veces se encontrará con cierto código que no se ejecutará si se lo llama desde un subproceso modelado por STA, porque está diseñado para enviar/recibir datos a través de límites de subprocesos de maneras que no cumplen con las restricciones de STA. Saber de antemano cuál es el modelo de apartamento de un subproceso dado permite al IDE detectar estas excepciones en tiempo de compilación en lugar de tener errores de violación de acceso desagradables cuando intenta utilizar un objeto a través de límites de subprocesos durante el tiempo de ejecución.

Usted puede leer acerca de STA y subprocesos MTA del artículo de MSDN en: http://msdn.microsoft.com/en-us/library/ms680112(VS.85).aspx

Tenga en cuenta que las aplicaciones .NET incluso normales (antes de WPF) requiere la declaración [STAThread] cima de la main().

4

Hay una excelente respuesta para esto en este blog entry.

Citando el blog:

Cuando el STAThreadAttribute es aplicada, que cambia el estado de apartamento del hilo actual para ser solo subproceso. Sin entrar en una gran discusión sobre el enhebrado COM y , este atributo asegura el mecanismo de comunicación entre el hilo actual y otros hilos que pueden querer comunicar con COM. Cuando está usando Windows Forms, dependiendo de en la función que está utilizando, puede ser usando la interoperabilidad COM para comunicarse con los componentes del sistema operativo . Buenos ejemplos de esto son el Portapapeles y los Diálogos de Archivo.

Windows Forms no es compatible con un MTA o apartamento con rosca libre. Las aplicaciones que utilicen Windows Forms siempre deben declarar el estilo de apartamento que están utilizando, ya que algunos otros componentes podrían inicializar el estado de apartamentos de forma incorrecta.

+0

si no es "demasiado complicado" para un principiante ... entonces no es necesario ...Me encanta leer :) –

+2

Todavía es bueno tener un resumen aquí en SO para fines de referencia, y si dicho blog se desconecta, la publicación se elimina, Microsoft se quema en una bola de fuego del infierno, etc. –

Cuestiones relacionadas