Что [STAThread] делает?

У меня есть Toshiba Satelite A100 и для меня следующие работы команды:

echo 0 | sudo tee  /sys/class/backlight/acpi_video0/brightness
276
задан oɔɯǝɹ 31 January 2015 в 05:46
поделиться

3 ответа

STAThreadAttribute по сути является требованием для передачи сообщений Windows с компонентами COM. Хотя ядро ​​Windows Forms не использует COM, многие компоненты ОС, такие как системные диалоги, используют эту технологию.

MSDN объясняет причину несколько более подробно:

STAThreadAttribute указывает, что атрибут Модель потоков COM для приложение однопоточное квартира. Этот атрибут должен быть присутствует на входе любого приложение, использующее Windows Forms; если он не указан, Windows компоненты могут работать неправильно. Если атрибут отсутствует, приложение использует многопоточную модель квартиры, которой нет поддерживается для Windows Forms.

Эта запись в блоге ( Почему требуется STAThread? ) также довольно хорошо объясняет это требование. Если вы хотите получить более подробное представление о том, как модель потоковой передачи работает на уровне CLR, см. эту статью журнала MSDN за июнь 2004 г. (архив, апрель 2009 г.).

231
ответ дан 23 November 2019 в 02:08
поделиться

Он сообщает компилятору, что вы находитесь в модели однопоточной квартиры. Это злая вещь COM, она обычно используется для Windows Forms (GUI), так как для рисования используется Win32, реализованный как STA. Если вы используете что-то, что является моделью STA из нескольких потоков, вы получаете поврежденные объекты.

Вот почему вы должны вызывать Gui из другого потока (если вы выполнили какое-либо кодирование форм).

В основном не делайте ' Не беспокойтесь об этом, просто примите тот факт, что потоки графического интерфейса Windows должны быть помечены как STA, иначе произойдут странные вещи.

33
ответ дан 23 November 2019 в 02:08
поделиться

Атрибут STAThreadAttribute отмечает поток использовать однопоточный COM Квартира, если нужен COM. По по умолчанию .NET не инициализирует COM в все. Только когда нужен COM, например, когда COM-объект или COM Control создается или когда перетаскивание необходимо, чтобы COM был инициализирован. когда что происходит, .NET вызывает базовая функция CoInitializeEx, который принимает флаг, указывающий, присоединить поток к многопоточному или однопоточная квартира.

Подробнее здесь (Архивировано, июнь 2009 г.)

и

Почему требуется STAThread?

29
ответ дан 23 November 2019 в 02:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: