使用代码创建的控件对象,设置的事件监听方法不执行的有关问题
使用代码创建的控件对象,设置的事件监听方法不执行的问题
在程序运行的时候可以发现,并没有OK窗口弹出,设置断点会发现,根本就没有到 w_DocumentCompleted方法中运行。原因是这个浏览器所在的线程,在执行完m方法后就结束了,根本没有来得及执行事件监听的方法。此时有一个办法是,使用Messagebox使这个线程暂时的不要消失
这是在一个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.