求思路。我现在是这么想的,假设有100个任务要多线程执行,每次最多执行10个线程,我现在用线程池来完成,把线程池大小设为10,再把这100个线程循环放入线程池,然后设置了一个CountdownEvent c信号在每个线程执行完毕后减1,通过while循环监视这个信号的当前量来设置进度条。这样确实是可以了,但是由于主线程一直处于监视状态,当我切换程序到其他界面后再切回来程序就假死了。我希望程序不处于假死状态。试过再创建一个线程来监视这个信号量,但是老是提示错误“ProgressBar 无法再不是创建它的线程使用”。
这个我做过,
别通过while循环见识这个信号量,使用异步回调吧。
关于异步回调的知识查询一下MSDN就知道了。
或者吧进度条设置为showDialog()
回调不就变成在线程池内执行了吗?我怕会和我的任务起冲突。
用beginInvoke去更新你的UI。只有回到原来的主线程才能更新UI控件的状态。你可以再每个任务里面都做一次this.progressBar.beginInvoke(updateUIDelegte,somepara,somepara)去更新UI。
回调不就变成在线程池内执行了吗?我怕会和我的任务起冲突。
@林J: 不会
this.progressBar.beginInvoke(updateUIDelegte,somepara,somepara)去更新UI 这些任务都是在其他线程里的,没法调用主线程定义的progressBar的啊
@林J: 如果是这样,你可以在某个地方维护一个你任务状态的变量之类的,在可以访问主线程的地方去做这个界面的更新