本文地址:IT屋 » BackgroundWorkers never stop being busy
的(做一堆次)
{
而(backgroundWorker1.IsBusy&安培;&安培; backgroundWorker2.IsBusy和放大器;&安培;
backgroundWorker3.IsBusy&功放;&安培; backgroundWorker4.IsBusy&功放;&安培;
backgroundWorker5.IsBusy)
{
System.Threading.Thread.Sleep(0001);
}
如果(!backgroundWorker1.IsBusy)
{
backgroundWorker1.RunWorkerAsync();
}
否则,如果(!backgroundWorker2.IsBusy)
{
backgroundWorker2.RunWorkerAsync();
}
否则,如果(!backgroundWorker3.IsBusy)
{
backgroundWorker3.RunWorkerAsync();
}
否则,如果(!backgroundWorker4.IsBusy)
{
backgroundWorker4.RunWorkerAsync();
}
否则,如果(!backgroundWorker5.IsBusy)
{
backgroundWorker5.RunWorkerAsync();
}
}
运行5次(每次BG-工人一次),并卡在一段时间。不要将backgroundworkers永远停止正在忙吗?我怎么查询?
请注意:有5个工作线程,这样保证其中没有一个是以往任何时候都停止了,总是分配工作给他们。但他们拒绝告诉我的时候都可以,我认为将有一个简单的解决方案。
其实这只是一个虚拟的参数,我删除它,忘了把它弄出来,我只用它来调用DoWork的,谁做的肮脏的工作:
私人无效backgroundWorker1_DoWork(对象发件人,DoWorkEventArgs E)
{
timeconsumingfunction(publicstring);
}

而timeconsumingfunction DOES结束。步入这在调试和运行的每行线,它会直到结束,到达最后的“}”。这意味着它结束了吧?
System.Threading.Thread.Sleep(0001);
与
Application.DoEvents();
我想它会运行的后台,但没有得到答案,而不是更新IsBusy标签。
谢谢大家,伟大的答案,帮助了很多!
解决方案
您环路导致僵局,BGWs无法完成。问题是RunWorkerCompleted事件,它提高了UI线程。对BGW魔法位需要UI线程被闲置,必须抽它的消息循环。backgroundworker问题是,在UI线程是没有闲着,它是不抽的消息,它被卡在for循环。因此,该事件处理程序不能运行,IsBusy保持为真。backgroundworker
您将需要不同的方法来做这个。杠杆RunWorkerCompleted事件运行code,你会通常在此之后运行循环。一切诱惑,调用Application.DoEvents()内循环。
本文地址:IT屋 » BackgroundWorkers从来没有停止忙
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27010-2.html
不开雷达不装炮弹电磁辐射对于军舰来说已经最低了还被直接找到