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();
}
}
esegue cinque volte (ogni lavoratore BG una volta) e rimane bloccato nel frattempo. I lavoratori del background non smettono mai di essere occupati? come controllo la disponibilità?BackgroundI lavoratori non smettono mai di essere occupati
nota: ci sono 5 thread di lavoro, questo assicura che nessuno di loro è mai stato fermato, assegnando sempre il lavoro a loro. Ma si rifiutano di dirmi quando sono disponibili, ho pensato che avrebbe una soluzione semplice ..
- [Richiesta modifica] ---
In realtà era solo un parametro fittizio, ho rimosso e dimenticato di farlo uscire, io uso solo per chiamare il DoWork, che fa il lavoro sporco:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
timeconsumingfunction(publicstring);
}
E la timeconsumingfunction finisce. entrando nel debugger e eseguendo la linea per riga, va fino alla fine e arriva nel finale '}'. Ciò significa che finisce, giusto?
--- [RISPOSTA EDIT] ---- ha funzionato, semplicemente sostituendo la linea
System.Threading.Thread.Sleep(0001);
con
Application.DoEvents();
Credo che correrebbe il fondo, ma non riceve il rispondi e non aggiornare i tag IsBusy.
Grazie a tutti, ottime risposte, ha aiutato molto!
Il modo più semplice per determinare se il processo è terminato consiste nel rilasciare un punto di interruzione sull'evento RunWorkerCompleted e consentire l'esecuzione del programma. Se si preme il punto di interruzione, l'operatore in background ha terminato il lavoro. – 53an