这是在一个WinForm程序中,点击界面上的一个按钮,产生另外的一个线程产生WebBrowser控件,并增加事件监听
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(m)); t.Start();
}
private void m()
{
WebBrowser w = new WebBrowser();
w.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(w_DocumentCompleted);
w.Navigate("www.baidu.com");
}
private void w_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
MessageBox.Show("OK");
}
在程序运行的时候可以发现,并没有OK窗口弹出,设置断点会发现,根本就没有到 w_DocumentCompleted方法中运行。原因是这个浏览器所在的线程,在执行完m方法后就结束了,根本没有来得及执行事件监听的方法。此时有一个办法是,使用Messagebox使这个线程暂时的不要消失
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(m));
t.ApartmentState = ApartmentState.STA;
t.Start();
}
private void m()
{
WebBrowser w = new WebBrowser();
w.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(w_DocumentCompleted);
w.Navigate("www.baidu.com");
MessageBox.Show("AAA");
}
private void w_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
MessageBox.Show("OK");
}
现在,如果现实AAA后,线程暂时不消失,然后就能监听到事件,出现OK.