いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Windows FormsのProgressBarの進みがちょっとだけ遅れる

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。忘れないうちにメモメモ。。。

今更、Windows Formsかよって話しなのですが、現場では全然現役で存在してたりします。

とても久しぶりにプログレスバーを表示した進捗ダイアログみたいなのを作っていたのですが

ラベル部分(トータル何件中の何番目みたいなの)を表示する部分とプログレスバーの描画がなんか合わない。。

プログレスバーが少しだけ遅れて進む感じ。ピタってあって欲しいんだけど・・・・って思って、こちょこちょやってたのですが以下を発見。

stackoverflow.com

ここに乗ってる処理を入れたら一発で解決しました。感謝!

忘れないよう、ここにコピーしておく。

public static class ExtensionMethods
{
    /// <summary>
    /// Sets the progress bar value, without using 'Windows Aero' animation.
    /// This is to work around a known WinForms issue where the progress bar 
    /// is slow to update. 
    /// </summary>
    public static void SetProgressNoAnimation(this ProgressBar pb, int value)
    {
        // To get around the progressive animation, we need to move the 
        // progress bar backwards.
        if (value == pb.Maximum)
        {
            // Special case as value can't be set greater than Maximum.
            pb.Maximum = value + 1;     // Temporarily Increase Maximum
            pb.Value = value + 1;       // Move past
            pb.Maximum = value;         // Reset maximum
        }
        else
        {
            pb.Value = value + 1;       // Move past
        }
        pb.Value = value;               // Move to correct value
    }
}

参考情報

c# - ProgressBar is slow in Windows Forms - Stack Overflow


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。