for (do it a bunch of times)
{
while (backgroundWorker1.IsBusy && backgroundWorker2.IsBusy &&
backgroundWorker3.IsBusy && backgroundWorker4.IsBusy &&
backgroundWorker5.IsBusy)
{
System.Threading.Thread.Sleep(0001);
}
if (!backgroundWorker1.IsBusy)
{
backgroundWorker1.RunWorkerAsync();
}
else if (!backgroundWorker2.IsBusy)
{
backgroundWorker2.RunWorkerAsync();
}
else if (!backgroundWorker3.IsBusy)
{
backgroundWorker3.RunWorkerAsync();
}
else if (!backgroundWorker4.IsBusy)
{
backgroundWorker4.RunWorkerAsync();
}
else if (!backgroundWorker5.IsBusy)
{
backgroundWorker5.RunWorkerAsync();
}
}
它运行五次(每个BG工人一次)并陷入困境。背景工作者不要停止忙碌吗?我如何检查可用性?背景工作者永远不会停止忙碌
注意:有5个工作线程,这可以确保他们中的任何一个都不会停下来,始终将工作分配给他们。但他们拒绝告诉我,当他们可用,我认为将有一个简单的解决办法..
- [编辑请求] ---
其实这只是一个虚拟的参数,我删除它,忘了把它弄出来,我只用它来调用DoWork的,谁做的肮脏的工作:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
timeconsumingfunction(publicstring);
}
而且timeconsumingfunction DOES结束。在调试器和每行运行线中进入它,直到结束并到达最后的'}'。这意味着它结束了,对吧?
--- [编辑答案】---- 它的工作与
Application.DoEvents();
JUST更换线
System.Threading.Thread.Sleep(0001);
我想它会运行背景,但没有收到回答并不更新IsBusy标签。
谢谢大家,很好的答案,帮了很大忙!
确定作业是否完成的最简单方法是在RunWorkerCompleted事件上放下断点并让程序运行。如果你点击了断点,那么后台工作者已经完成了这项工作。 – 53an 2010-02-02 12:07:21