C#とWindowsフォームを使用しています。プログラムでは正常に動作する通常のプログレスバーがありますが、現在は継続時間を簡単に計算できない別の操作があります。進行状況バーを表示したいのですが、スクロールマーキーを開始/停止する最良の方法がわかりません。私は、マーキーの速度を設定してからstart()とstop()を設定するような単純なものを望んでいましたが、それほど単純ではないようです。バックグラウンドで空のループを実行する必要がありますか?これをどのように行うのが最善ですか?ありがとう
スタイルをMarquee
に設定した進行状況バーを使用します。これは、不確定な進行状況バーを表します。
myProgressBar.Style = ProgressBarStyle.Marquee;
また、 MarqueeAnimationSpeed
プロパティを使用して、プログレスバー全体でアニメーション化するのに色の小さなブロックがかかる時間を設定することもできます。
アニメーションを開始/停止するには、次を実行する必要があります。
始めること:
progressBar1.Style = ProgressBarStyle.Marquee;
progressBar1.MarqueeAnimationSpeed = 30;
止まる:
progressBar1.Style = ProgressBarStyle.Continuous;
progressBar1.MarqueeAnimationSpeed = 0;
仕組みではありません。マーキースタイルのプログレスバーを表示して「開始」し、非表示にして停止します。 Styleプロパティを変更できます。
このコードは、ユーザーが認証サーバーの応答を待つログインフォームの一部です。
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();
}
}
}
MSDNのこのトピックのコードには、ニース 記事 があります。 StyleプロパティをProgressBarStyle.Marqueeに設定するのは適切ではないと考えています(または、制御しようとしているものですか??-速度は制御できますが、このアニメーションを停止/開始することはできないと思います) @Paulが示すように)。
すでに多くの良い答えがありますが、UIスレッドで長時間実行される処理(一般的には悪い考え)を実行している場合は、マーキーも移動しないことに注意する必要があります。