Unterschied zwischen BackgroundWorker und Faden?
Was ist der Unterschied zwischen BackgroundWorker
und Thread
? In meiner Anwendung verwende ich ein messaging-system, die die Kommunikation mit der Datenbank regelmäßig. Welche würde ich nutzen möchten hier: BackgroundWorker
oder Thread
?
InformationsquelleAutor Nighil | 2011-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen BackgroundWorker ist ein gebrauchsfertiges Klasse in WinForms ermöglicht Ihnen das ausführen von Aufgaben in hintergrundthreads, die verhindert das einfrieren der Benutzeroberfläche, außerdem können Sie leicht Marschall der Ausführung des Erfolgs-callback auf den Haupt-thread, die Ihnen die Möglichkeit zum aktualisieren der Benutzeroberfläche mit den Ergebnissen. Es gibt auch die Möglichkeit, um die Fortschritte zu verfolgen und beenden Sie die Aufgabe. Es nutzt threads aus dem threadpool.
Auf der anderen Seite eine Thread ist eine Klasse, so dass Sie führen Sie einfach eine Aufgabe auf einem neuen thread. Es ist eine viel grundlegendere Konzept.
InformationsquelleAutor Darin Dimitrov
Während der
BackgroundWorker
Klasse ist nicht abgeleitet von derThread
Klasse es ermöglicht Ihnen die Verwaltung der Arbeit ein thread ist viel leichter, als wenn Sie erstellt und aufgerufen wird der thread selbst.Wirft es drei wichtige Ereignisse:
DoWork
- wird ausgelöst, wenn der thread gestartet wird.ProgressChanged
- angehoben, um Fortschritte auf dem Haupt-UI-thread.RunWorkerCompleted
- wird ausgelöst, wenn der thread abgeschlossen ist.Mit diesen können Sie überwachen die Arbeit der thread ist zu tun, nachdem Sie nennen
RunWorkerAsync()
zu starten.du hast Recht. Ich benutzte das falsche Wort. Ich werde aktualisieren, die Antwort.
InformationsquelleAutor ChrisF
Den BackgroundWorker verwendet threads aus dem ThreadPool, mit Thread-erstellen Sie Ihre eigenen thread. Darüber hinaus gibt es irgendeine Einrichtung in der Bezeichnung der Veranstaltung Berichterstattung an die aufrufende thread.
InformationsquelleAutor Felice Pollano
Einen BackgroundWorker ist eine thread-Implementierung, ermöglicht das zuweisen zuweisen einer Methode zu tun.
Es gibt Ihnen eine Kommunikations-API, die es Ihnen ermöglicht, die Arbeit zu beenden, verfolgen Sie den Fortschritt und benachrichtigt werden, Asynchron ausgeführt werden.
InformationsquelleAutor Yochai Timmer
Verwendung der BackgroundWorker-Klasse - es sowieso kapselt thread und ist einfacher, mit zu arbeiten. Einer der Vorteil daran ist, dass die api ermöglicht eine einfachere event-basierte Modell zu berichten, Fortschritte und weitere, diese Ereignis-Anrufe korrekt weitergeleitet UI-thread (so, dass Sie nicht zu tun haben, Marschall der Aufruf mittels Invoke-Methode).
InformationsquelleAutor VinayC
BackgroundWorker hat bereits implementierte Funktionalität der Berichterstattung über die Fortschritte, Abschluss und Kündigung -, so brauchen Sie nicht, um es zu implementieren selbst.
Die Verwendung von Thread gibt Ihnen mehr Kontrolle über den asynchronen Prozess der Ausführung (z.B. thread-Priorität oder die Wahl zwischen dem Vordergrund - /hintergrund-thread geben).
BTW manchmal brauchen Sie nicht, Fortschrittsberichte und andere BackgroundWorker-Sachen - so-Thread/ThreadPool gute alternative.
InformationsquelleAutor Sergey Berezovskiy
Ich denke, es ist ein großer Unterschied, das ist, Wenn Sie wollen jede UI-Komponente in Methoden aufgerufen, die von der BackgroundWorker-Klasse, es funktioniert überhaupt nicht. Ich meine BackgroundWorker ist ein Prozess im hintergrund wirklich und Sie werden nicht in der Lage, um Schnittstelle zu verwenden Aktionen. Zum Beispiel, wenn Sie ein neues label anlegen, in der Methode aufrufen wollen, die von der BackgroundWorker-Klasse, Sie fangen einen Fehler, definitiv.
InformationsquelleAutor D.Farzaneh