Hintergrund:
DieBackgroundWorker
-Klasse ist eine Komponente, die verwendet wird, um lang laufende Aufgaben im Hintergrund auszuführen und gleichzeitig die Reaktionsfähigkeit der Benutzeroberfläche aufrechtzuerhalten. Damit können Sie die Benutzeroberfläche aktualisieren oder andere Vorgänge ausführen, die im UI-Thread ausgeführt werden müssen.
Frage:
Ein Benutzer versucht, ein BackgroundWorker
zu implementieren, um den Fortschrittsbalken zu aktualisieren, während eine Aufgabe mit langer Laufzeit ausgeführt wird. Die Fortschrittsbalkenanimation startet jedoch erst, wenn der Thread DoWork
abgeschlossen ist. Der Benutzer hat auch versucht, den Fortschrittsbalken mit einem anderen BackgroundWorker
zu aktualisieren, aber es funktionierte immer noch nicht, bis der BackgroundWorker
-Thread des ersten DoWork
abgeschlossen war.
Antwort:
Um BackgroundWorker
korrekt zum Aktualisieren des Fortschrittsbalkens zu verwenden, benötigen Sie:
BackgroundWorker
-Eigenschaft von WorkerReportsProgress
auf true
gesetzt ist und dass der ProgressChanged
-Ereignishandler implementiert ist, um den Fortschrittsbalken zu aktualisieren. BackgroundWorker
-Ereignishandler von DoWork
in geeigneten Abständen die Methode ReportProgress
auf, um den aktuellen Fortschritt der Aufgabe zu melden. Dadurch wird das Ereignis ProgressChanged
ausgelöst und der Fortschrittsbalken im UI-Thread aktualisiert. ProgressChanged
-Ereignis wird im UI-Thread ausgelöst, sodass UI-Elemente direkt von diesem Ereignishandler aus aktualisiert werden können. Hier können Sie das Attribut Value
des Fortschrittsbalkens aktualisieren, um den gemeldeten Fortschritt widerzuspiegeln. Codebeispiel:
Hier ist ein einfaches Codebeispiel, das zeigt, wie man mit BackgroundWorker
einen Fortschrittsbalken aktualisiert:
<code class="language-csharp">// 用户控件代码隐藏 private void DoWork(object sender, DoWorkEventArgs e) { for (int i = 0; i <= 100; i++) { // 模拟长时间运行的工作 Thread.Sleep(100); backgroundWorker.ReportProgress(i); } } private void ProgressChanged(object sender, ProgressChangedEventArgs e) { // 当调用 ReportProgress 方法时,这会在 UI 线程上调用 progressBar.Value = e.ProgressPercentage; }</code>
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich eine ProgressBar kontinuierlich mithilfe eines BackgroundWorkers?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!