Я изучаю C # 3.5, и я хочу знать, что [STAThread]
делает в наших программах?
источник
Я изучаю C # 3.5, и я хочу знать, что [STAThread]
делает в наших программах?
По STAThreadAttribute
сути, это требование к насосу сообщений Windows для связи с компонентами COM. Хотя ядро Windows Forms не использует COM, многие компоненты ОС, такие как системные диалоги, используют эту технологию.
MSDN объясняет причину чуть более подробно:
Атрибут STAThreadAttribute указывает, что модель потока COM для приложения является однопоточным. Этот атрибут должен присутствовать в точке входа любого приложения, использующего Windows Forms; если он опущен, компоненты Windows могут работать неправильно. Если атрибут отсутствует, приложение использует модель многопоточной квартиры, которая не поддерживается для Windows Forms.
Этот пост в блоге ( почему требуется STAThread? ) Также достаточно хорошо объясняет это требование. Если вы хотите получить более подробное представление о том, как работает модель потоков на уровне CLR, см. Эту статью журнала MSDN за июнь 2004 года (архив, апрель 2009 года).
[STAThread]
?Он сообщает компилятору, что вы находитесь в модели однопотоковой квартиры. Это злая вещь COM, обычно она используется для Windows Forms (GUI), так как она использует Win32 для рисования, которое реализовано как STA. Если вы используете что-то, что является моделью STA из нескольких потоков, то вы получите поврежденные объекты.
Вот почему вы должны вызывать на Gui из другого потока (если вы сделали какие-либо формы кодирования).
По сути, не беспокойтесь об этом, просто примите, что потоки графического интерфейса Windows должны быть помечены как STA, в противном случае происходят странные вещи.
источник
Подробнее читайте здесь (Архив, июнь 2009)
и
Почему требуется STAThread?
источник