我在自己启动的线程创建了webbrowser控件,结果抛ThreadStateException 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2“。
是怎么回事?我如何能在这个线程中创建webbrowser?不是显示它,只是创建这个对象然后使用它。在主线程创建的和使用的时候我试过可以。
在线等
是怎么回事?我如何能在这个线程中创建webbrowser?不是显示它,只是创建这个对象然后使用它。在主线程创建的和使用的时候我试过可以。
在线等
主界面放N个webbrowser控件
因为WebBrowser使用了COM接口,所以对线程是有要求的这样开线程就可以了
Thread t = new Thread(CreateWebBrowser);
t.SetApartmentState(ApartmentState.STA);
t.Start();
public partial class Form1 : Form
{
public Form1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
Thread t = new Thread(CreateWebBrowser);
t.SetApartmentState(ApartmentState.STA);
t.Start();
}
delegate void MyDelegate();
static WebBrowser _webBrowser = null;
static void CreateWebBrowser() {
_webBrowser = new WebBrowser();
_webBrowser.Location = new System.Drawing.Point(0, 100);
_webBrowser.MinimumSize = new System.Drawing.Size(20, 20);
_webBrowser.Name = "_webBrowser";
_webBrowser.Size = new System.Drawing.Size(400, 500);
_webBrowser.TabIndex = 2;
Form1.ActiveForm.Invoke((MyDelegate)delegate() {
Form1.ActiveForm.Controls.Add(_webBrowser);
});
_webBrowser.Navigate("http://www.google.com.hk");
}
}