在子线程中启动带控件的窗体,默认设置的情况下会提示“当前线程不在单线程单元中,因此无法实例化 ActiveX 控件……”的错误。
原因是子线程默认是创建“MTA Thread 将创建并进入一个多线程单元”而非“STA Thread 将创建并进入一个单线程单元”。
简单的解决方法是设置子线程为STA类型:
Thread t
= new Thread(new ThreadStart(delegate
{
WebBrowser browser
= new WebBrowser();
}));
t
.SetApartmentState(ApartmentState
.STA
);
t
.IsBackground
= true;
t
.Start();
这样就轻松解决了问题。