首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >单线程单元-无法实例化ActiveX控件

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

Stack Overflow用户
提问于 2009-09-13 18:21:51
回答 3查看 111K关注 0票数 68

我需要获得有关HTML页面中应用的CSS样式的信息。我使用了AxWebBrowser并迭代了IHTMLDOMNode。我能够获得所需的所有数据,并将代码移动到我的应用程序中。问题是这个部分是在后台工作程序内部运行的,我在尝试实例化控件时得到了异常。

代码语言:javascript
复制
AxWebBrowser browser = new AxWebBrowser();

ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated
because the current thread is not in a single-threaded apartment.

除了AxWebBrowser之外,还有什么方法可以解决这个问题或其他选择吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-13 18:23:41

您遇到的问题是,大多数后台线程/工作器API都会在多线程单元状态下创建线程。错误消息指示控件要求线程是单线程单元。

您可以通过自己创建线程并在线程上指定STA单元状态来解决此问题。

代码语言:javascript
复制
var t = new Thread(MyThreadStartMethod);
t.SetApartmentState(ApartmentState.STA);
t.Start();
票数 88
EN

Stack Overflow用户

发布于 2011-05-22 01:37:59

继续将STAThread添加到应用程序的主项中,这表明COM线程模型是单线程单元(STA)。

示例:

代码语言:javascript
复制
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new WebBrowser());
    }
}
票数 64
EN

Stack Overflow用户

发布于 2021-10-13 11:04:41

我的问题是我的Main方法被标记为async。因此,只需将其设置为static void并将.wait()添加到内部所有支持await的方法中,即可修复它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1418466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档