Webbrowser在紧凑的框架中

时间:2017-01-04 12:59:06

标签: c# webbrowser-control compact-framework

我想在.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 documentationWebBrowser组件可用于紧凑框架项目。甚至有一些例子。 (遗憾的是,未提供完整代码)。

那么,我错过了什么?

1 个答案:

答案 0 :(得分:2)

我终于在这里发现了什么错误。

实际上,当我尝试直接在笔记本电脑上运行已编译的可执行文件时,上面的例外(即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 Emulator”)。您需要在测试之前使用工具栏中的“连接到设备”按钮连接这些设备。建立连接后,应用程序实际上在模拟器上运行正常。

问题仍然存在:为什么应用程序不能直接在我的笔记本电脑上运行,而它在模拟器中运行良好。但这是一个不同的问题。

当然操作系统是不同的。但我的印象是,系统使用不同版本的.NET框架。以前我错误地认为所有紧凑的框架应用程序也可以在完全成熟的.net框架的笔记本电脑上运行。现在看来这是不正确的。