我需要获取有关HTML页面中应用的CSS样式的信息。我使用了AxWebBrowser并迭代了IHTMLDOMNode。我能够获取所需的所有数据并将代码移入应用程序。问题是这部分正在后台工作程序内部运行,尝试实例化控件时出现异常。AxWebBrowser browser = new AxWebBrowser();ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiatedbecause the current thread is not in a single-threaded apartment.除了AxWebBrowser之外,还有什么方法可以解决此问题或其他选项?
3 回答
红糖糍粑
TA贡献1815条经验 获得超6个赞
您遇到的问题是,大多数后台线程/辅助API都会以“多线程单元”状态创建线程。错误消息表明控件要求线程是单线程单元。
您可以通过自己创建一个线程并在该线程上指定STA公寓状态来解决此问题。
var t = new Thread(MyThreadStartMethod);
t.SetApartmentState(ApartmentState.STA);
t.Start();
Cats萌萌
TA贡献1805条经验 获得超9个赞
如果您习惯[STAThread]了应用程序的主条目,但仍然收到错误,则可能需要对控件进行线程安全调用 ……如下所示。对于我来说,同样的问题,以下解决方案有效!
Private void YourFunc(..)
{
if (this.InvokeRequired)
{
Invoke(new MethodInvoker(delegate()
{
// Call your method YourFunc(..);
}));
}
else
{
///
}
- 3 回答
- 0 关注
- 837 浏览
添加回答
举报
0/150
提交
取消