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