2017-01-05 13 views
1

AFAIK, все приложения Windows Forms должны установить директиву [STAThread] над их методом Main().Требование STAThread для форм Windows

Однако есть исключение. Мы пишем приложения для устройств Windows Mobile, используя Compact Framework. Компактная конструкция даже не поддерживает директиву [STAThread], она имеет только [MTAThread]. Тем не менее, я никогда не сталкивался с какими-либо проблемами.

Теперь, чтобы сделать это на 1 шаг дальше, вы также можете запускать приложения Compact Framework на полностью раздутой системе Windows. Я думаю, что в этом случае будет использоваться полномасштабная .NET-платформа.

В этот момент мы запускаем код с состоянием квартиры MTA, в котором используются формы окон на полностью раздутой системе окон. Это подводит меня к вопросу: , если приложение с компактными рамами работает на полностью раздутой операционной системе Windows, почему он не жалуется на недостающую директиву [STAThread]?

ответ

1

По This Answer я бы сказал, что это не собственно Windows Forms, работающие на нормальной машине, но подмножество. Разумеется, может быть и то, что происходит какое-то проксирование, и в рамках этой структуры мы заботимся о загрузке потока STA и сортировке взад и вперед для вас.

Комментарий к This Question а именно:

Простые приложения CF будет работать без изменений на рабочем столе, это хорошо известно. Но приложения, использующие только API-интерфейсы CF (т. Е. Связанные с aygshell), не будут работать. Опция компиляции STAThread может использоваться только во время компиляции (AFAIK). Если DLL была скомпилирована с этой опцией, я могу себе представить, что она не будет работать на рабочем столе. Для компонента веб-браузера вам не нужно загружать этот жесткий код, но изнутри кода, а затем загружать либо полный каркасный, либо один CF. CF-формы жестко привязаны к MTA. Если COM загружен, который требует STA, он выдаст исключение.

Йозефом, кажется, указывает, что компактные каркасные формы будут счастливо катить вместе под MTA, но наркомана, как только вы используете COM-компонент на основе из WinForms, что делает требуют STA.

+2

См. Https://social.msdn.microsoft.com/Forums/en-US/d5b637f4-56f6-417a-a004-851c8e7ca01f/stathread-can-not-be-found-but-where-is-it? forum = netfxcompact «Нет, вы ничего не пропустили - в NETCF нет такого атрибута, и нет никакого способа заставить поведение STA. MTA - единственный поддерживаемый режим, и вам не нужна STA на NETCF». – josef