2009-10-24 13 views

risposta

37

La classe BackgroundWorker astrae fondamentalmente il processo Thread creazione e il monitoraggio, e ti dà un'API event-driven per segnalare il progresso dell'operazione (ProgressChanged) e determinare quando l'operazione è terminata (RunWorkerCompleted) ...

Uno degli usi più comuni è mantenere una GUI di Windows reattiva mentre un processo a esecuzione prolungata viene eseguito in background. Quindi, fondamentalmente, è solo un wrapper per System.Threading.Thread progettato per rendere il threading di sfondo un po 'più semplice (come suggerisce il nome!)

+0

Quindi, fondamentalmente, è solo un wrapper per System.Threading.Thread progettato per rendere il threading un po 'più semplice? – Icemanind

+1

http://stackoverflow.com/questions/1506838/backgroundworker-vs-background-thread/1507337#1507337 –

+0

@MattDavis Ottimo collegamento, sarebbe probabilmente più significativo se esistesse una descrizione o qualcosa di più di SOLO il collegamento. – Randolph

18

10 è in realtà un wrapper per l'invocazione di thread asincrona tramite delegati - utilizzando il reflector si può vederlo chiama di conseguenza i metodi begin/end invoke. Questo differisce da un System.Threading.Thread in quanto utilizza il threadpool anziché avviare un nuovo thread.

Il motivo principale per l'utilizzo di background worker è che si integra perfettamente con le applicazioni di Windows Form.

+4

+1 per catturare con precisione il fatto che i dipendenti in background utilizzano il pool di thread. Inoltre, è utile per le persone che sanno che BackgroundWorker non è una buona scelta se è necessario chiamare un oggetto COM STA poiché l'appartamento non può essere impostato –