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-worker один раз) и на время застревает. Разве фоновые работники никогда не перестают быть занятыми? как я могу проверить наличие?
примечание: есть 5 рабочих потоков, это гарантирует, что ни один из них никогда не будет остановлен, и всегда назначает им работу. Но они отказываются сообщить мне, когда они будут доступны, я подумал, что у этого есть простое решение ..
- [запрос на редактирование] ---
На самом деле это был всего лишь фиктивный параметр, я удалил его и забыл вытащить, я использую его только для вызова dowork, который выполняет грязную работу:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
timeconsumingfunction(publicstring);
}
И функция, отнимающая много времени, ДЕЙСТВИТЕЛЬНО заканчивается. входя в него в отладчике и выполняя строку за строкой, он идет до конца и прибывает в финал '}'. Значит, все кончено, правда?
--- [РЕДАКТИРОВАТЬ ОТВЕТ] ---- это сработало, просто заменив строку
System.Threading.Thread.Sleep(0001);
с участием
Application.DoEvents();
Я предполагаю, что он запустит фон, но не получит ответа и не обновит теги IsBusy.
Всем спасибо, отличные ответы, очень помогли!