在使用執行冗長計算的外部函式庫時,顯示進度條以向使用者提供回饋非常有用。在 WinForms 中,可以使用 ProgressBar 控制項來實現此目的。
如果計算在您的 Form 類別中同步執行,則只需在每次計算完成後使用 PerformStep() 方法遞增 ProgressBar。例如:
<code class="language-csharp">private void button1_Click(object sender, EventArgs e) { progressBar1.Maximum = 100000; progressBar1.Step = 1; for(int j = 0; j < 100000; j++) { // Perform calculation progressBar1.PerformStep(); } }</code>
但是,如果計算在外部方法中非同步執行,則無法直接從該方法更新 ProgressBar。而應該使用 BackgroundWorker 類別執行計算並將進度報告回 UI 執行緒。
BackgroundWorker 類別可讓您在單獨的執行緒中執行耗時的操作,同時向主 UI 執行緒提供進度更新。它有一個 ReportProgress 方法,可讓您將進度百分比傳回 UI 執行緒。
以下是用 BackgroundWorker 的範例:
<code class="language-csharp">private void button1_Click(object sender, EventArgs e) { progressBar1.Maximum = 100; progressBar1.Step = 1; progressBar1.Value = 0; backgroundWorker.RunWorkerAsync(); } private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { var backgroundWorker = sender as BackgroundWorker; for (int j = 0; j < 100; j++) { // Perform calculation backgroundWorker.ReportProgress(j); Thread.Sleep(100); // 模拟耗时操作 } } private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage; }</code>
在此範例中,計算在 backgroundWorker_DoWork 方法中執行,而 backgroundWorker_ProgressChanged 方法用於在 UI 執行緒上更新 ProgressBar。
以上是如何在非同步運算期間更新 WinForms ProgressBar?的詳細內容。更多資訊請關注PHP中文網其他相關文章!