Я сделал приложение для Windows Compact Framework 3.5, которое работает нормально.Запуск компактного кода рамки на настольном компьютере
После компиляции на моем компьютере создан файл .exe
. До недавнего времени я мог также запустить этот exe-файл на своем компьютере. (без использования имитатора)
Но недавно я заметил, что мое приложение работает только на мобильных устройствах. Когда я пытаюсь запустить его на своем настольном компьютере, я получаю странное сообщение об ошибке, которое указывает, что я должен запустить свое приложение с помощью директивы [STAThread]
для метода Main()
.
Однако для мобильных устройств это не обязательно, все работает нормально, как есть. На самом деле, я даже не могу добавить [STAThread]
в исходный код, потому что компактная структура не поддерживает его. Добавление этого параметра приводит к ошибкам компиляции.
К сожалению, это также проблема сейчас. Я хотел бы добавить условный код, который оценивает, работает ли он в Windows CE или Windows Desktop. Когда он запускается на рабочем столе, он должен запустить код в STAThread
режиме. Тем не менее, Я не могу найти способ добавить такой код, потому что он не компилируется. Это всегда сводится к тому, что компилятор не знает, что такое STAThread.
Есть ли способ или трюк, чтобы справиться с этим?
Хорошим обходным решением для меня было бы скомпилировать его по-другому, возможно, выбрав другую целевую платформу, когда я скомпилирую ее для настольных компьютеров. Однако в настоящее время я не могу этого сделать. Есть идеи ?
_Until recent_ - так что-то изменилось. В какой ОС вы работаете, какие изменения в приложении, можете ли вы сопоставить это с недавним обновлением? –
@HenkHolterman Действительно, я начал использовать компонент WebBrowser. Мне кажется, как будто реализация WebBrowser на мобильном устройстве может работать нормально в MTA, в то время как компонент WebBrowser с полномасштабной оконной системой требует STA. На самом деле это причина этого вопроса (я хотел оставить это вне сферы охвата этого вопроса, потому что это только усложняет ситуацию) :) – bvdb
Простые приложения для CF будут работать без изменений на рабочем столе, это хорошо известно. Но приложения, использующие только API-интерфейсы CF (т. Е. Связанные с aygshell), не будут работать. Опция компиляции STAThread может использоваться только во время компиляции (AFAIK). Если DLL была скомпилирована с этой опцией, я могу себе представить, что она не будет работать на рабочем столе.Для компонента веб-браузера вам не нужно загружать этот жесткий код, но изнутри кода, а затем загружать либо полный каркасный, либо один CF. CF-формы жестко привязаны к MTA. Если COM загружен, который требует STA, он выдаст исключение. – josef