Ormai sembra una barzelletta, ma per fortuna gli errori sono quasi finiti...
Una domanda del quiz di autovalutazione dell'esame 70-526 spiega che si vuole visualizzare una ProgressBar con cui informare l'utente sull'avanzamento di una certa operazione in backgruond. La domanda chiede qual è il modo migliore per realizzare questa funzionalità. La risposta segnalata come valida dice di creare all'interno di un Form un Timer che scatta ogni secondo; nel gestore dell'evento Tick si deve richiamare il metodo BackgruondWorker.ProgressChanged ed esaminare il valore di ritorno per aggiornare la barra.
In questo risposta ci sono almeno due errori. Il primo è che utilizzare un timer per verificare l'avanzamento dell'operazione non è sicuramente un metodo consigliabile, dal momento che sono preferibili le strade basate su Callback ed eventi. Il secondo, e più grave, riguarda la parte della domanda in cui si parla di BackgruondWorker.ProgressChanged: quest'ultimo, infatti, non è un metodo, bensì un evento che viene generato dall'oggetto BackgroundWorker quando al suo interno si invoca il metodo ReportProgress. Di conseguenza, ProgressChanged non può essere richiamato da un form, né tantomeno ha un valore di ritorno.
La soluzione corretta (e migliore) consiste nel registrasi sull'evento BackgroundWorker.ProgressChanged e, nel gestore relativo, utilizzare la proprietà ProgressChangedEventArgs.ProgressPercentage per conoscere l'avanzamento dell'operazione.