2017-01-04 4 views
1

Я хотел бы использовать компонент WebBrowser в проекте .NET Compact Framework 3.5. Я столкнулся с противоречивой информацией об этом.Webbrowser в компактном каркасе

Если я просто пытаюсь использовать его, я получаю следующее исключение:

System.Threading.ThreadStateException: ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment. 
at System.Windows.Forms.WebBrowserBase..ctor(String clsidString) 
at System.Windows.Forms.WebBrowser..ctor() 
at dce.pd.dialogmgr.baseimpl.DialogDeviceImpl.createGui(XmlElement pDialogManagerNode) in C:\sourceview\CS.NETCF.2008\dce\pd\dialogmgr\baseimpl\DialogDeviceImpl.cs:line 362 
at dce.pd.dialogmgr.baseimpl.DialogDeviceImpl.init() in C:\sourceview\CS.NETCF.2008\dce\pd\dialogmgr\baseimpl\DialogDeviceImpl.cs:line 118 
at dce.pd.dialogmgr.thinimpl.ThinClient.createDeviceImpl() in C:\sourceview\CS.NETCF.2008\dce\pd\dialogmgr\thinimpl\ThinClient.cs:line 82 
at dce.pd.dialogmgr.thinimpl.ThinClient.init() in C:\sourceview\CS.NETCF.2008\dce\pd\dialogmgr\thinimpl\ThinClient.cs:line 87 
at dce.pd.dialogmgr.thinimpl.ThinClient.form_Load(Object sender, EventArgs e) in C:\sourceview\CS.NETCF.2008\dce\pd\dialogmgr\thinimpl\ThinClient.cs:line 66 
at System.Windows.Forms.Form.OnLoad(EventArgs e) 
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 
at System.Windows.Forms.Control.CreateControl() 
at System.Windows.Forms.Control.WmShowWindow(Message& m) 
at System.Windows.Forms.Control.WndProc(Message& m) 
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 

Для меня это звучит, как я должен поставить [STAThread] директиву к моему Main метода.

[STAThread] 
static void Main() 
{ 
    ... 
} 

Но это не работает ни, потому что the [STAThread] option is not available in compact framework.. Таким образом, приложение даже не будет компилироваться.

Тем не менее, согласно Microsoft's documentation, для компактного каркасного проекта доступны компоненты WebBrowser. Есть даже некоторые примеры. (К сожалению, полный код не указан).

Итак, что мне не хватает?

+0

Что вы разрабатываете в этом проекте? Когда я использовал [WebBrowser Control] (https://msdn.microsoft.com/en-us/library/aa752040.aspx), я развивался в Visual Studio 2008. VS2010 и новее не поддерживают .Net CF , – jp2code

+0

Это в Visual Studio 2008, с компактной структурой 3.5 – bvdb

ответ

1

Я, наконец, нашел, что здесь не так.

На самом деле исключение выше (то есть System.Threading.ThreadStateException: ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment.) появляется только при попытке запустить скомпилированный исполняемый файл непосредственно на моем ноутбуке.

Симулятор не работал на меня. И наконец я получил симулятор. Я понял, что мне нужно выбрать устройство «эмулятор», которое заканчивается «эмулятором» в его названии. (например, «Эмулятор Windows Mobile 6»). Перед тестированием необходимо подключить эти устройства, используя кнопку «подключиться к устройству» на панели инструментов. После того, как соединение выполнено, приложение действительно отлично работает на эмуляторе.

остается вопрос: почему не приложение запускается непосредственно на моем ноутбуке, в то время как он прекрасно работать в эмуляторе. Но это другой вопрос.

Конечно, операционная система отличается. Но у меня создается впечатление, что система использует другую версию .NET framework. Ранее Я ошибочно полагал, что все приложения с компактными рамами могут также работать на ноутбуке с полномасштабной инфраструктурой .net. Теперь кажется, что это неверно.

+0

Как прокомментировал ваш другой вопрос, на рабочем столе будут запускаться только простые приложения CF. Компонент веб-браузера CF отличается от FF. CF один не зарегистрирован на рабочем столе, и ваше приложение пытается загрузить FF, предоставляя исключение STA. Регистрация CF webbrowser COM не будет работать на рабочем столе (я так полагаю). Если приложение CF использует только CF-API (например, связанные с aygshell), он не будет работать на рабочем столе. Не каждый CF будет работать на рабочем столе! – josef

Смежные вопросы