3 ответов:
на
STAThreadAttributeпо существу, это требование к насосу сообщений Windows для связи с компонентами COM. Хотя ядро Windows Forms не использует COM, многие компоненты ОС, такие как системные диалоги, используют эту технологию.MSDN объясняет причину чуть подробнее:
STAThreadAttribute указывает, что Модель com продевая нитку для приложение является однопоточным квартира. Этот атрибут должен быть присутствует на точка входа любого приложение, которое использует Windows Forms; если он опущен, то окна компоненты могут работать неправильно. Если атрибут отсутствует, то приложение использует многопоточность модель квартиры, которой нет поддерживается для Windows Forms.
этот блог (почему STAThread требуется?) также объясняет требование довольно хорошо. Если вы хотите получить более глубокое представление о том, как работает потоковая модель в Уровень CLR, см. эта статья журнала MSDN с июня 2004 года (Архив, Апреля. 2009).
атрибут STAThreadAttribute помечает поток чтобы использовать однопоточный COM Квартира, если COM необходим. От по умолчанию .NET не будет инициализировать COM все. Это только тогда, когда COM необходим, например, когда COM-объект или COM-элемент управления создается или когда перетаскивание ' n ' является необходимо, чтобы COM был инициализирован. Когда это происходит, .NET вызывает базовая функция CoInitializeEx, который принимает флаг, указывающий, является ли для соединения резьбы с многопоточным или однопоточный квартира.
Читать подробнее здесь (Архивировано, Июнь 2009)
и
Он сообщает компилятору, что вы находитесь в одной потоковой модели квартиры. Это злая вещь COM, она обычно используется для Windows Forms (GUI), поскольку она использует Win32 для своего рисования, который реализован как STA. Если вы используете что-то, что является моделью STA из нескольких потоков, вы получаете поврежденные объекты.
вот почему вы должны вызвать на Gui из другого потока (если вы сделали какие-либо формы кодирования).
в основном, не беспокойтесь об этом, просто примите, что Потоки графического интерфейса Windows должны быть помечены как STA, иначе происходят странные вещи.
Comments