was ist der Zweck von backgroundWorker? (Kann ich einen Beispielcode zum Verständnis bekommen?)

7

Was ist der Zweck von backgroundWorker? (Kann ich einen Beispielcode zum Verständnis bekommen?)

Danke im Voraus

    
Gold 17.08.2009, 20:01
quelle

6 Antworten

22

Der Hintergrund-Worker-Thread soll dabei helfen, lange laufende Funktionsaufrufe an den Hintergrund auszulagern, damit die Schnittstelle nicht einfriert.

Nehmen wir an, Sie haben etwas, das 5 Sekunden für die Berechnung benötigt, wenn Sie auf eine Schaltfläche klicken. Während dieser Zeit wird das Interface "eingefroren" angezeigt: Sie können nicht mit ihm interagieren.

Wenn Sie stattdessen den Hintergrund-Worker-Thread verwendet haben, würde das Button-Ereignis den Worker-Thread einrichten und sofort zurückkehren. Dadurch kann die Oberfläche weiterhin neue Ereignisse wie andere Schaltflächen akzeptieren.

Soweit Code hier 2 Beispiele sind:

Hier friert die Schnittstelle ein

%Vor%

Hier wird es nicht angezeigt, da das OnClick sofort zurückkehrt und die lang andauernde Funktion wird in einem anderen Thread ausgeführt werden.

%Vor%

Der Unterschied im Verhalten liegt darin, dass der Aufruf des Hintergrund-Worker-Threads nicht im selben Thread wie die Schnittstelle ausgeführt wird, so dass er seine normale Arbeit fortsetzen kann.

    
ADB 17.08.2009 20:06
quelle
2

Mit dem BackgroundWorker können Sie schwere oder lange Operationen in einem separaten Thread auf der Benutzeroberfläche ausführen. Wenn Sie einen langwierigen Prozess im Benutzeroberflächenthread ausführen, wird Ihre Benutzeroberfläche höchstwahrscheinlich eingefroren, bis der Prozess abgeschlossen ist.

Der BackgroundWorker geht jedoch noch einen Schritt weiter, indem er den Threading-Prozess für Sie vereinfacht. Wenn Sie einen eigenen Thread erstellen, um den schweren oder langwierigen Prozess auszuführen, müssen Sie Delegaten verwenden, um beispielsweise auf den UI-Thread zuzugreifen, um eine Fortschrittsanzeige zu aktualisieren. Mit BackgroundWorker benötigen Sie keine Delegierten, da das ProgressChanged -Ereignis des BackgroundWorker bereits im UI-Thread ausgeführt wird und Sie Ihre UI hinzufügen können Code dort aktualisieren.

Um BackgroundWorker zu starten, müssen Sie RunWorkerAsync () :

aufrufen %Vor%

Um es manuell zu stoppen, rufen Sie CancelAsync () ...

auf %Vor%

Und überprüfen Sie dann die CancellationPending -Eigenschaft innerhalb des DoWork -Ereignisses, wie im folgenden Beispiel gezeigt:

%Vor%

Ich habe einen Artikel über die Verwendung des BackgroundWorker in meinem Blog geschrieben. Sie können es hier überprüfen: Verwenden der BackgroundWorker-Komponente in C #

    
David Azzopardi 30.09.2009 16:07
quelle
1
___ qstnhdr ___ was ist der Zweck von backgroundWorker? (Kann ich einen Beispielcode zum Verständnis bekommen?) ___ qstntxt ___

Was ist der Zweck von backgroundWorker? (Kann ich einen Beispielcode zum Verständnis bekommen?)

Danke im Voraus

    
___ antwort1290111 ___

Es funktioniert im Hintergrund mit Threads .

    
___ answer1499135 ___

Mit dem BackgroundWorker können Sie schwere oder lange Operationen in einem separaten Thread auf der Benutzeroberfläche ausführen. Wenn Sie einen langwierigen Prozess im Benutzeroberflächenthread ausführen, wird Ihre Benutzeroberfläche höchstwahrscheinlich eingefroren, bis der Prozess abgeschlossen ist.

Der BackgroundWorker geht jedoch noch einen Schritt weiter, indem er den Threading-Prozess für Sie vereinfacht. Wenn Sie einen eigenen Thread erstellen, um den schweren oder langwierigen Prozess auszuführen, müssen Sie Delegaten verwenden, um beispielsweise auf den UI-Thread zuzugreifen, um eine Fortschrittsanzeige zu aktualisieren. Mit BackgroundWorker benötigen Sie keine Delegierten, da das ProgressChanged -Ereignis des BackgroundWorker bereits im UI-Thread ausgeführt wird und Sie Ihre UI hinzufügen können Code dort aktualisieren.

Um BackgroundWorker zu starten, müssen Sie RunWorkerAsync () :

aufrufen %Vor%

Um es manuell zu stoppen, rufen Sie CancelAsync () ...

auf %Vor%

Und überprüfen Sie dann die CancellationPending -Eigenschaft innerhalb des DoWork -Ereignisses, wie im folgenden Beispiel gezeigt:

%Vor%

Ich habe einen Artikel über die Verwendung des BackgroundWorker in meinem Blog geschrieben. Sie können es hier überprüfen: Verwenden der BackgroundWorker-Komponente in C #

    
___ answer1290123 ___

Der Hintergrund-Worker-Thread soll dabei helfen, lange laufende Funktionsaufrufe an den Hintergrund auszulagern, damit die Schnittstelle nicht einfriert.

Nehmen wir an, Sie haben etwas, das 5 Sekunden für die Berechnung benötigt, wenn Sie auf eine Schaltfläche klicken. Während dieser Zeit wird das Interface "eingefroren" angezeigt: Sie können nicht mit ihm interagieren.

Wenn Sie stattdessen den Hintergrund-Worker-Thread verwendet haben, würde das Button-Ereignis den Worker-Thread einrichten und sofort zurückkehren. Dadurch kann die Oberfläche weiterhin neue Ereignisse wie andere Schaltflächen akzeptieren.

Soweit Code hier 2 Beispiele sind:

Hier friert die Schnittstelle ein

%Vor%

Hier wird es nicht angezeigt, da das OnClick sofort zurückkehrt und die lang andauernde Funktion wird in einem anderen Thread ausgeführt werden.

%Vor%

Der Unterschied im Verhalten liegt darin, dass der Aufruf des Hintergrund-Worker-Threads nicht im selben Thread wie die Schnittstelle ausgeführt wird, so dass er seine normale Arbeit fortsetzen kann.

    
___ answer1290113 ___

Die MSDN-Dokumentation enthält ein C # -Codebeispiel, das darstellt, was der Hintergrundarbeiter tut und wie er verwendet wird.

Ссылка

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer1290147 ___

Der Zweck der BackgroundWorker-Klasse besteht darin, Ihnen eine einfache Möglichkeit zu bieten, Operationen in einem separaten Thread auszuführen.

Es abstrahiert den Thread-Erstellungs- und Überwachungsprozess und gibt Ihnen eine ereignisgesteuerte API, um den Fortschritt der Operation zu melden ( ProgressChanged ) und bestimmen, wann Ihre Operation beendet ist ( RunWorkerCompleted ) ..

Ist sehr nützlich, wenn Sie zeitraubende Aufgaben ausführen müssen, die dazu führen können, dass die Benutzeroberfläche nicht mehr reagiert.

    
___ answer1290120 ___

Arbeit machen ... im Hintergrund? :)

Von MSDN :

  

Die BackgroundWorker-Klasse ermöglicht es Ihnen   eine Operation auf einem separaten,   gewidmetes Thema. Zeitaufwendig   Operationen wie Downloads und Datenbank   Transaktionen können Ihren Benutzer veranlassen   Benutzeroberfläche (UI) zu scheinen, als ob es   reagiert nicht mehr, solange sie es sind   Laufen. Wenn Sie eine ansprechende Benutzeroberfläche wünschen   und Sie sind mit langen Verzögerungen konfrontiert   im Zusammenhang mit solchen Operationen, die   BackgroundWorker-Klasse bietet a   bequeme Lösung.

Die gleiche Seite hat auch ein ausführliches Beispiel. Hier ist ein weiteres anständiges Tutorial.

    
___
mcandre 17.08.2009 20:03
quelle
1

Arbeit machen ... im Hintergrund? :)

Von MSDN :

  

Die BackgroundWorker-Klasse ermöglicht es Ihnen   eine Operation auf einem separaten,   gewidmetes Thema. Zeitaufwendig   Operationen wie Downloads und Datenbank   Transaktionen können Ihren Benutzer veranlassen   Benutzeroberfläche (UI) zu scheinen, als ob es   reagiert nicht mehr, solange sie es sind   Laufen. Wenn Sie eine ansprechende Benutzeroberfläche wünschen   und Sie sind mit langen Verzögerungen konfrontiert   im Zusammenhang mit solchen Operationen, die   BackgroundWorker-Klasse bietet a   bequeme Lösung.

Die gleiche Seite hat auch ein ausführliches Beispiel. Hier ist ein weiteres anständiges Tutorial.

    
Thorarin 17.08.2009 20:05
quelle
1

Der Zweck der BackgroundWorker-Klasse besteht darin, Ihnen eine einfache Möglichkeit zu bieten, Operationen in einem separaten Thread auszuführen.

Es abstrahiert den Thread-Erstellungs- und Überwachungsprozess und gibt Ihnen eine ereignisgesteuerte API, um den Fortschritt der Operation zu melden ( ProgressChanged ) und bestimmen, wann Ihre Operation beendet ist ( RunWorkerCompleted ) ..

Ist sehr nützlich, wenn Sie zeitraubende Aufgaben ausführen müssen, die dazu führen können, dass die Benutzeroberfläche nicht mehr reagiert.

    
CMS 17.08.2009 20:11
quelle
0

Die MSDN-Dokumentation enthält ein C # -Codebeispiel, das darstellt, was der Hintergrundarbeiter tut und wie er verwendet wird.

Ссылка

    
chollida 17.08.2009 20:04
quelle

Tags und Links