C# ThreadPool und Backgroundworker Unterschiede?

SourceCoder

Lt. Commander
Registriert
Apr. 2012
Beiträge
1.563
Hallö ich mal wieder ,

wo genau ist der Unterschied zwischen ThreadPool und Backgroundworker.
Ich habe gelesen das Backgroundworker auch den ThreadPool verwenden, dann dürfte es doch keine Unterschiede geben oder?
 
bin zwar kein C# Profi. aber das sind zwei verschiedene Ebenen:

Der Backgroundworker ist nix anders als eine "Hilfsklasse" die es erlaubt mit einem Thread der im Hintergrund arbeitet einfacher zu arbeiten.

ThreadPool ist eine vom OS/compiler/Laufzeitumgebug zur Verfügung gestellter Pool an Threads, damit du
* Threads widerverwenden kannst. Dadurch entfällt der Overhead für das erzeugen/zerstören
* kontrollieren kannst wieviel Threads insgesamt verwendet werden, damit du z.B. auf einen dualcore System nicht 20 Threads laufen lassen und vor lauter Overhead nix mehr weiterkriegst.

Ein Thread ist etwas allgemeineres als ein Backgroundworker. D.h. jeder B-Worker verwendet einen Thread, aber nicht jeder Thread ist ein Backgroundworker (es gibt zB. einen GUI Thread...)
 
Wobei ich mit einer Einschränkung des Standard Threadpools sehr vorsichtig wär. Auch Standardkommunikationskomponenten von .NET wie WCF z.B. nutzen diesen Pool, und wenn Du den zu sehr einschränkst, bricht die ganze Kommunikation zusammen.
 
Richtig, der BackgroundWorker verwendet Threads aus dem ThreadPool.
Der Unterschied/Vorteil ist, dass der BackgroundWorker Methoden und Events hat, die die Arbeit mit der GUI erleichtern. So läuft das RunWorkerCompleted-Event automatisch auf dem GUI-Thread um diese einfacher zu aktualisieren. Das gleiche gilt für "ProgressChanged". Der BackgroundWorker dient also hauptsächlich zur Komfortsteigerung.
Eine neuere Methode (ab .NET 4) zum Arbeiten im Hintergrund ist die Task Parallel Library (TPL). Diese verwendet auch den ThreadPool ist aber flexibler als der BackgroundWorker.

Verwenden sollte man in 99% der Fälle nur den BackgroundWorker oder die TPL. Beide sind auf jeden Fall einen Blick wert.
ThreadPool oder (noch schlimmer) Thread direkt zu verwenden ist i. d. R. unkomfortabel und teilweise auch langsam, wenn man nicht ganz genau weiß was man tut, also nicht empfehlenswert.
 
http://stackoverflow.com/questions/1506838/backgroundworker-vs-background-thread

Da ist die Antwort auf Englisch beschrieben.
TPL ist eine Erweiterung von ThreadPool. Zumindest ist es sehr stark von Threadpool abhängig.

Wer Auf TPL zugreifen kann, soll es tun. Es bietet viel mehr features. Wenn man nur .NET 3.5 benutzen kann, sollte sich für die Antwort im Link oben entscheiden. Je nach Situation.

Ich glaube die Hirarchie geht ungefähr so:

Thread -> BackgroundWorker -> (auf mehrere gleichzeitig laufende Threads) ThreadPool -> TPL
 
Zurück
Oben