在某些情況下,您可能需要為在外部程式庫中執行的正在進行的計算顯示進度。但是,您希望將計算方法與進度條的直接依賴性解耦。
考慮以下範例:
<code class="language-c#">private void CaluculateAll(System.Windows.Forms.ProgressBar progressBar) { progressBar.Maximum = 100000; progressBar.Step = 1; for (int j = 0; j < 100000; j++) { // Perform some calculation progressBar.PerformStep(); } }</code>
雖然這種方法確保了進度報告,但它將CaluculateAll
方法與進度條緊密綁定在一起。為了解決這個問題,請考慮使用BackgroundWorker類別:
<code class="language-c#">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 some calculation backgroundWorker.ReportProgress(j); } } private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage; }</code>
這種分離允許計算獨立於UI執行,同時提供了一種增量進度報告的機制。 BackgroundWorker處理必要的執行緒和同步,以防止在計算期間介面凍結。
透過有效地使用BackgroundWorker,您可以無縫地更新進度條,而不會影響程式碼庫的靈活性和解耦。
以上是如何在 C# 中將進度條更新與外部計算解耦?的詳細內容。更多資訊請關注PHP中文網其他相關文章!