在外部計算期間更新 WinForms 進度條而不阻塞 UI
WinForms 應用程式通常需要在外部程式庫執行的冗長計算期間顯示進度。 關鍵是更新進度條,而不讓運算方法依賴UI。
利用BackgroundWorker
BackgroundWorker
組件提供了一個有效的解決方案。它支援在單獨的執行緒中並行執行計算,從而允許定期更新主 UI 執行緒的進度。 這是一個例子:
<code class="language-csharp">private void Calculate(int i) { double pow = Math.Pow(i, i); } private void button1_Click(object sender, EventArgs e) { progressBar1.Maximum = 100; progressBar1.Step = 1; progressBar1.Value = 0; backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; for (int j = 0; j < 100; j++) { Calculate(j); // Perform your external calculation worker.ReportProgress(j); // Report progress to the UI thread Thread.Sleep(100); // Simulate work } } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage; }</code>
在此場景中,backgroundWorker1_DoWork
管理計算並透過 ReportProgress
報告進度。 backgroundWorker1_ProgressChanged
然後相應地更新進度條。
使用BackgroundWorker的優點
此方法有幾個關鍵優勢:
以上是如何在外部運算期間更新 WinForms 進度條而不阻塞 UI?的詳細內容。更多資訊請關注PHP中文網其他相關文章!