Es funktioniert im Hintergrund mit Threads .
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.
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 #
Was ist der Zweck von backgroundWorker? (Kann ich einen Beispielcode zum Verständnis bekommen?)
Danke im Voraus
Es funktioniert im Hintergrund mit Threads .
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 #
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.
Die MSDN-Dokumentation enthält ein C # -Codebeispiel, das darstellt, was der Hintergrundarbeiter tut und wie er verwendet wird.
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.
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.
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.
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.
Tags und Links c#