WebBrowser 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件

 

使用多线程,在Form中实例化WebBrowser时,就会报异常

private void InitializeComponent()
{
  this.webBrowser1 = new System.Windows.Forms.WebBrowser();  //异常
}

 

我用下面方法解决:

1、在方法块外包一个线程

2、线程加入STA

Thread t = new Thread((ThreadStart)(() =>
{
    FormBrowser form = new FormBrowser();
    //Show()是非阻塞的,函数执行完整个线程就结束了,因此窗体就消失了。 (现象是看起来没有显示form)
    //ShowDialog()方法阻塞式显示窗体,就不会消失了,因为新的窗体是在主线程上创建的
    //form.Show();   
    form.ShowDialog();
}));

// 把代码线程,加入到 STA 线程
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();

 

posted @ 2021-03-03 12:18  quanzhan  阅读(620)  评论(0编辑  收藏  举报