ホームページ > バックエンド開発 > C++ > 非同期計算中に WinForms ProgressBar を更新するにはどうすればよいですか?

非同期計算中に WinForms ProgressBar を更新するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-14 11:47:43
オリジナル
649 人が閲覧しました

How to Update a WinForms ProgressBar During Asynchronous Calculations?

WinForms 非同期計算進行状況バーの使用ガイド

長時間の計算を実行する外部ライブラリを使用する場合、進行状況バーを表示してユーザーにフィードバックを提供すると便利です。 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 を使用する

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 サイトの他の関連記事を参照してください。

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