首页 新闻 搜索 专区 学院

winform 多线程程序如何创建进度条

0
悬赏园豆:10 [已关闭问题] 关闭于 2012-10-22 08:15

求思路。我现在是这么想的,假设有100个任务要多线程执行,每次最多执行10个线程,我现在用线程池来完成,把线程池大小设为10,再把这100个线程循环放入线程池,然后设置了一个CountdownEvent c信号在每个线程执行完毕后减1,通过while循环监视这个信号的当前量来设置进度条。这样确实是可以了,但是由于主线程一直处于监视状态,当我切换程序到其他界面后再切回来程序就假死了。我希望程序不处于假死状态。试过再创建一个线程来监视这个信号量,但是老是提示错误“ProgressBar 无法再不是创建它的线程使用”。

林J的主页 林J | 菜鸟二级 | 园豆:202
提问于:2012-10-17 09:05
< >
分享
所有回答(2)
0

这个我做过,

别通过while循环见识这个信号量,使用异步回调吧。

关于异步回调的知识查询一下MSDN就知道了。

或者吧进度条设置为showDialog()

朝曦 | 园豆:1073 (小虾三级) | 2012-10-17 09:18

回调不就变成在线程池内执行了吗?我怕会和我的任务起冲突。

支持(0) 反对(0) 林J | 园豆:202 (菜鸟二级) | 2012-10-17 09:24
0

用beginInvoke去更新你的UI。只有回到原来的主线程才能更新UI控件的状态。你可以再每个任务里面都做一次this.progressBar.beginInvoke(updateUIDelegte,somepara,somepara)去更新UI。

Ethan轻叹 | 园豆:996 (小虾三级) | 2012-10-17 09:18

回调不就变成在线程池内执行了吗?我怕会和我的任务起冲突。

支持(0) 反对(0) 林J | 园豆:202 (菜鸟二级) | 2012-10-17 09:24

@林J: 不会

支持(0) 反对(0) Ethan轻叹 | 园豆:996 (小虾三级) | 2012-10-17 09:33

this.progressBar.beginInvoke(updateUIDelegte,somepara,somepara)去更新UI                               这些任务都是在其他线程里的,没法调用主线程定义的progressBar的啊

支持(0) 反对(0) 林J | 园豆:202 (菜鸟二级) | 2012-10-17 09:38

@林J: 如果是这样,你可以在某个地方维护一个你任务状态的变量之类的,在可以访问主线程的地方去做这个界面的更新

支持(0) 反对(0) Ethan轻叹 | 园豆:996 (小虾三级) | 2012-10-17 09:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册