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楼:“而报告进度函数是在主线程里面运行的。”是对的。