WINFORM线程控制进度条

lllcui 2009-09-04 08:09:48
有一段执行很慢的程序,就比如说是9999999次的一个循环.执行的时候窗体会死掉.
在窗体上加一个进度条.把这段程序扔到线程里去执行.
但是线程结束时,我要给个提示,告诉我已完成.然后把进度条关掉.
但是在子线程中无法操作主线程上的控件.
我对控件Invoke添加委托,在线程里执行.又会变成执行时窗体死掉的情况,等于跟没用线程一个样.
请问该如何处理.
...全文
115 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lllcui 2009-09-04
  • 打赏
  • 举报
回复
其实我编的不是一个循环,只是处理数据库中大量数据,要等的时间很久,为了给用户一个友好的显示,所以想加个进度条.Invoke应该只调用一次.但是,一执行,窗体就白掉了.啥也不显示,等数据处理完,直接蹦个完成给我,进度条根本就不显示.中间的处理过程,就是个假死.连窗体都不显了.
lllcui 2009-09-04
  • 打赏
  • 举报
回复
我自己搞定了,给我自己 加分行不行?
ChrisAK 2009-09-04
  • 打赏
  • 举报
回复
所谓Invoke是给窗体线程发一条消息告诉它做啥事.而你这里有9999999次循环,
如果你每次循环都Invoke一下;并且这循环还很短;那窗体线程会收到大量密集的
Invoke消息要处理根本无心处理用户输入绘制图像等其它消息.所以会造成窗体假
死.

至于解决方法...看具体情况,如果循环执行的很快每执行1~200次Invoke一下.
如果不是很快每10~20次Invoke一下.
gisyellow 2009-09-04
  • 打赏
  • 举报
回复
用BackgroundWorker吧

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧