Tutto quello che c'è da sapere sul BackgroundWorker è in msdn.
Come dice l'articolo:
Per ricevere notifiche di aggiornamenti sui progressi, gestire l'evento ProgressChanged.
Aggiornamento:
Letta domande supplementari di Martijn, e dato che ha una classe che fino a quel momento ha fatto il suo lavoro, presumibilmente sul filo primo piano, mi piacerebbe aggiungere il seguente:
La classe operaia è responsabile del lavoro, quindi ha anche la responsabilità di riferire sui suoi progressi. Il fatto che generi una sottofondo per fare il lavoro non è la preoccupazione del Form.
Quindi, sarei propenso a impostare la classe sul BGW e gestire i suoi eventi ProgressChanged, quindi generare i propri eventi (sul thread in primo piano) a cui il modulo stesso potrebbe quindi iscriversi. Faccio un sacco di codice WinForms usando questa tecnica e funziona perfettamente.
L'alternativa sarebbe quella di esporre il BGW come una proprietà pubblica della classe lavoratrice, e hanno la forma di gestire direttamente i suoi eventi. Ma non mi piace così tanto, poiché rende la forma dipendente dall'implementazione della classe operaia. Questa è generalmente una brutta cosa.
Come esporre l'evento ProgressChanged al modulo? – Martijn
Ho appena aggiornato la mia risposta per dimostrarlo. – andyp
questa è una risposta meravigliosa e assolutamente utile, grazie mille! –