ホームページ > バックエンド開発 > C++ > 外部計算中に UI をブロックせずに WinForms プログレス バーを更新する方法

外部計算中に UI をブロックせずに WinForms プログレス バーを更新する方法

Patricia Arquette
リリース: 2025-01-14 10:58:43
オリジナル
735 人が閲覧しました

How to Update a WinForms Progress Bar During External Calculations Without Blocking the UI?

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: 計算中に UI の応答性を維持します。
  • 柔軟な進捗レポート: 単純なパーセンテージを超えた詳細な進捗状況の更新をサポートします。
  • メソッドの独立性: 外部計算ロジックから進捗レポートを切り離します。

以上が外部計算中に UI をブロックせずに WinForms プログレス バーを更新する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート