У меня есть Toshiba Satelite A100 и для меня следующие работы команды:
echo 0 | sudo tee /sys/class/backlight/acpi_video0/brightness
STAThreadAttribute
по сути является требованием для передачи сообщений Windows с компонентами COM. Хотя ядро Windows Forms не использует COM, многие компоненты ОС, такие как системные диалоги, используют эту технологию.
MSDN объясняет причину несколько более подробно:
STAThreadAttribute указывает, что атрибут Модель потоков COM для приложение однопоточное квартира. Этот атрибут должен быть присутствует на входе любого приложение, использующее Windows Forms; если он не указан, Windows компоненты могут работать неправильно. Если атрибут отсутствует, приложение использует многопоточную модель квартиры, которой нет поддерживается для Windows Forms.
Эта запись в блоге ( Почему требуется STAThread? ) также довольно хорошо объясняет это требование. Если вы хотите получить более подробное представление о том, как модель потоковой передачи работает на уровне CLR, см. эту статью журнала MSDN за июнь 2004 г. (архив, апрель 2009 г.).
Он сообщает компилятору, что вы находитесь в модели однопоточной квартиры. Это злая вещь COM, она обычно используется для Windows Forms (GUI), так как для рисования используется Win32, реализованный как STA. Если вы используете что-то, что является моделью STA из нескольких потоков, вы получаете поврежденные объекты.
Вот почему вы должны вызывать Gui из другого потока (если вы выполнили какое-либо кодирование форм).
В основном не делайте ' Не беспокойтесь об этом, просто примите тот факт, что потоки графического интерфейса Windows должны быть помечены как STA, иначе произойдут странные вещи.
Атрибут STAThreadAttribute отмечает поток использовать однопоточный COM Квартира, если нужен COM. По по умолчанию .NET не инициализирует COM в все. Только когда нужен COM, например, когда COM-объект или COM Control создается или когда перетаскивание необходимо, чтобы COM был инициализирован. когда что происходит, .NET вызывает базовая функция CoInitializeEx, который принимает флаг, указывающий, присоединить поток к многопоточному или однопоточная квартира.
Подробнее здесь (Архивировано, июнь 2009 г.)
и