長時間の計算を実行する外部ライブラリを使用する場合、進行状況バーを表示してユーザーにフィードバックを提供すると便利です。 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 スレッドに進行状況の更新を提供しながら、時間のかかる操作を別のスレッドで実行できます。これには、進行状況のパーセンテージを UI スレッドに送信できる ReportProgress メソッドがあります。
以下は、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 中国語 Web サイトの他の関連記事を参照してください。