Ho un semplice modulo con 2 barre di avanzamento e 1 backgroundworker su di esso. Ho 2 cicli (uno dentro l'altro) e vorrei segnalare l'avanzamento di ogni ciclo una volta incrementato. Ecco il codice che ho:Solo 1 di 2 barre di avanzamento viene aggiornato in BackgroundWorker
private void buttonStart_Click(object sender, EventArgs e)
{
workerCustomers.RunWorkerAsync();
}
private void workerCustomers_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
progressBar2.Value = (int)e.UserState;
}
private void workerCustomers_DoWork(object sender, DoWorkEventArgs e)
{
for (int customer = 0; customer < 50; customer++)
{
int customerPercentage = ++customer * 100/50;
workerCustomers.ReportProgress(customerPercentage, 0);
for (int location = 0; location < 500; location++)
{
int locationPercentage = ++location * 100/500;
workerCustomers.ReportProgress(customerPercentage, locationPercentage);
}
workerCustomers.ReportProgress(customerPercentage, 0);
}
}
Quando il programma viene eseguito, progressBar1 viene aggiornato più che bene, ma progressbar2 non si muove mai. Se lo eseguo attraverso il debugger, posso vedere il valore di progressbar2 che viene modificato, non c'è alcun cambiamento graficamente. Qualche idea?
Il valore massimo della barra di avanzamento è impostato correttamente? –
@lc., Sì, per impostazione predefinita, è impostato su 100 ma l'ho modificato per far corrispondere il totale del contatore del ciclo 2 in totale di 500. – Robert
Un ciclo di 500 andrà molto velocemente. Potrebbe non sembrare un aggiornamento. Prova ad aggiungere Thread.Sleep() al ciclo interno e verifica se in realtà sta accadendo troppo rapidamente per poterlo vedere. –