UI をブロックせずに外部計算中に WinForms の進行状況バーを更新する
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 を使用する利点
この方法には、いくつかの重要な利点があります。
以上が外部計算中に UI をブロックせずに WinForms プログレス バーを更新する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。