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

本文介绍如何在WinForm应用中通过新线程加载WebBrowser控件并正确监听DocumentCompleted事件,确保页面加载完成时能触发相应事件。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值