日期:2014-05-19  浏览次数:20783 次

BackGroundWorker下弹出的无模式窗体无响应
我在BackGroundWorker_DoWork事件中,写如下代码:

dim   frmnew   as   new   frmTip
frmnew.show

在弹出了frmTip实例时,frmtip不响应.好像处于忙的状态.但是我将代码改成frmnew.showdialog后,就可以了.怎么回事啊?


------解决方案--------------------
不知楼主是否已找到答案?
以下方法可以:
在RunWorkerCompleted事件中写入建立新窗口的代码
this.aForm = new Form2();
this.aForm.Show();
------解决方案--------------------
要在报告进度事件里操作才可以的...

直接在DoWork或RunWorkerCompleted事件处理是不正确的...

会导致窗体无法响应的...

想知道为什么吗?

^o^
------解决方案--------------------
因为DoWork函数中的代码实际上是在主线程外的一个新线程里面执行的。而报告进度函数是在主线程里面运行的。
------解决方案--------------------
在RunWorkerCompleted事件里写,窗口不会无法响应的,我试了。
对3楼的此句怀疑:-----“而报告进度函数是在主线程里面运行的。”

to 2楼:愿听!!!!!!!
------解决方案--------------------
呵呵!在MSDN上找到:
处理 ProgressChanged 和 RunWorkerCompleted 事件的方法可以访问应用程序的用户界面,原因是这两个事件是在调用了 RunWorkerAsync 方法的线程上引发的。但是,DoWork 事件处理程序无法操作任何用户界面对象,原因是它在后台线程上运行。

3楼:“而报告进度函数是在主线程里面运行的。”是对的。