使用代码创建的控件对象,设置的事件监听方法不执行的有关问题

使用代码创建的控件对象,设置的事件监听方法不执行的问题

这是在一个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.