背景:
BackgroundWorker
類別是一個用於在背景執行長時間運行的任務同時保持 UI 回應的元件。它允許您更新 UI 或執行任何其他需要在 UI 執行緒上執行的操作。
問題:
使用者嘗試實作一個 BackgroundWorker
來在長時間運行的任務執行時更新進度條。但是,進度條動畫直到 DoWork
執行緒完成才開始。使用者也嘗試使用另一個 BackgroundWorker
來更新進度條,但在第一個 BackgroundWorker
的 DoWork
執行緒完成之前,它仍然不起作用。
答案:
要正確使用 BackgroundWorker
更新進度條,您需要:
BackgroundWorker
的 WorkerReportsProgress
屬性設定為 true
,並且已實作 ProgressChanged
事件處理程序來更新進度條。 BackgroundWorker
的 DoWork
事件處理程序中,以適當的間隔呼叫 ReportProgress
方法來報告任務的當前進度。這將觸發 ProgressChanged
事件並在 UI 執行緒上更新進度條。 ProgressChanged
事件在 UI 執行緒上引發,因此可以直接從此事件處理程序更新 UI 元素。在這裡,您可以更新進度條的 Value
屬性以反映報告的進度。 程式碼範例:
這是一個簡單的程式碼範例,示範如何使用 BackgroundWorker
更新進度條:
<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>
以上是如何使用BackgroundWorker持續更新進度條?的詳細內容。更多資訊請關注PHP中文網其他相關文章!