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();