为了账号安全,请及时绑定邮箱和手机立即绑定

单线程单元-无法实例化ActiveX控件

单线程单元-无法实例化ActiveX控件

qq_笑_17 2019-11-30 13:32:38
我需要获取有关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();


查看完整回答
反对 回复 2019-11-30
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

如果您习惯[STAThread]了应用程序的主条目,但仍然收到错误,则可能需要对控件进行线程安全调用 ……如下所示。对于我来说,同样的问题,以下解决方案有效!


Private void YourFunc(..)

{

    if (this.InvokeRequired)

    {

        Invoke(new MethodInvoker(delegate()

        {

           // Call your method YourFunc(..);

        }));

    }

    else

    {

        ///

    }


查看完整回答
反对 回复 2019-11-30
  • 3 回答
  • 0 关注
  • 837 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信