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

高人请进~,Windows Form中新线程采用异步委托调用,为何还有阻塞、假死的现象?
我在Windows   Form主线程中,点击Button1,启动新线程(BackThread),以处理比较耗时的业务。
BackThread线程处理流程:(1--> 2--> 3)
1> 通过Invoke(new   MyDelegate(...))方式,将主线程隐藏的更新图片和Laber(lblWait)显示出来(.Visible=true),   lblWait.Text= "正在处理,请稍候... ";

2> 处理业务逻辑,BackProcess(...)---该方法比较耗时,可能需要几分钟;

3> 业务逻辑完成,将图片和文本隐藏。

结果:   虽然用多线程,仍出现假死现象。图片和文本都没有显示.BackThread运行结束后,主窗体(主线程)才恢复正常.

问题:   如何通过多线程,解决主窗体假死,通过新线程来处理耗时的业务,并在主窗体中,利用动画和文本提示用户业务正在处理。同时,不影响主窗体的其他操作。请帮忙指点一下......



------解决方案--------------------
你的主UI线程,在BackProcess工作的时候在做什么?waithandle么?那样也会假死。最好啥也不干,等BackProcess工作完了,通过Invoke(new MyDelegate(...)的方式,更新主线程UI。

如果以上猜想不对,还请lz详细说明下BackProcess工作的时候UI线程在做什么。
------解决方案--------------------
invoke 是同步调用,使用 begininvoke
------解决方案--------------------
同意。
invoke 是同步调用,使用 begininvoke
------解决方案--------------------
Thread.Sleep你等待是在UI线程上做的,前边的操作又很快,应该是已经变了,但又sleep了。