首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

BackGroundWorker下弹出的无模式窗体无响应解决思路

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

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

热点排行