83

C# と Windows フォームを使用しています。プログラムで正常に動作する通常の進行状況バーがありますが、現在、継続時間を簡単に計算できない別の操作があります。プログレス バーを表示したいのですが、スクロール マーキーを開始/停止する最良の方法がわかりません。マーキー速度を設定してから start() と stop() を設定するのと同じくらい簡単なことを望んでいましたが、それほど単純ではないようです。バックグラウンドで空のループを実行する必要がありますか? これを行うにはどうすればよいですか?ありがとう

4

7 に答える 7

119

スタイルが に設定された進行状況バーを使用しMarqueeます。これは不確定な進行状況バーを表します。

myProgressBar.Style = ProgressBarStyle.Marquee;

プロパティを使用してMarqueeAnimationSpeed、色の小さなブロックがプログレス バーでアニメーション化されるまでの時間を設定することもできます。

于 2008-11-23T21:40:20.600 に答える
59

アニメーションを開始/停止するには、次のようにする必要があります。

始めること:

progressBar1.Style = ProgressBarStyle.Marquee;
progressBar1.MarqueeAnimationSpeed = 30;

止まる:

progressBar1.Style = ProgressBarStyle.Continuous;
progressBar1.MarqueeAnimationSpeed = 0;
于 2009-03-03T18:06:01.400 に答える
9

このコードは、ユーザーが認証サーバーの応答を待つログイン フォームの一部です。

using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;

namespace LoginWithProgressBar
{
    public partial class TheForm : Form
    {
        // BackgroundWorker object deals with the long running task
        private readonly BackgroundWorker _bw = new BackgroundWorker();

        public TheForm()
        {
            InitializeComponent();

            // set MarqueeAnimationSpeed
            progressBar.MarqueeAnimationSpeed = 30;

            // set Visible false before you start long running task
            progressBar.Visible = false;

            _bw.DoWork += Login;
            _bw.RunWorkerCompleted += BwRunWorkerCompleted;
        }

        private void BwRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // hide the progress bar when the long running process finishes
            progressBar.Hide();
        }

        private static void Login(object sender, DoWorkEventArgs doWorkEventArgs)
        {
            // emulate long (3 seconds) running task
            Thread.Sleep(3000);
        }

        private void ButtonLoginClick(object sender, EventArgs e)
        {
            // show the progress bar when the associated event fires (here, a button click)
            progressBar.Show();

            // start the long running task async
            _bw.RunWorkerAsync();
        }
    }
}    
于 2011-07-14T23:16:05.870 に答える
9

それは彼らがどのように働くかではありません。マーキー スタイルのプログレス バーを表示することで「開始」し、非表示にすることで停止します。Style プロパティを変更できます。

于 2008-11-23T21:52:00.157 に答える
2

MSDN には、このトピックに関するコードを含むすばらしい記事があります。Style プロパティを ProgressBarStyle.Marquee に設定することは適切ではないと想定しています (または、それを制御しようとしているのでしょうか?? -- 速度を制御することはできますが、このアニメーションを停止/開始することはできないと思います@Paulが示すように)。

于 2008-11-23T21:29:05.910 に答える
2

ここにはすでに多くの良い答えがありますが、UI スレッドで長時間実行される処理を行っている場合 (通常は悪い考えです)、マーキーが移動することもありません。

于 2015-07-13T20:29:25.763 に答える
-3

タイマー(System.Windows.Forms.Timer)を使用できます。

Tick イベントをフックし、最大値に達するまで進行バーを進めます。それが (最大に達して) ジョブを終了していない場合は、プログレス バーの値を最小にリセットします。

...ちょうど Windows エクスプローラーのように :-)

于 2008-11-23T20:55:12.470 に答える