Windows窗体ProgressBar:最简单的方法来启动/停止字幕?

我正在使用C#和Windows窗体。 我有一个正常的进度条在程序中正常工作,但现在我有另一个操作时间不能轻易计算。 我想显示一个进度条,但不知道启动/停止滚动字幕的最佳方法。 我希望能够像设置选取框的速度一样简单,然后有start()和stop(),但是看起来并不那么简单。 我必须在后台运行一个空循环吗? 我如何最好地做到这一点? 谢谢

使用样式设置为“ Marquee的进度条。 这代表了一个不确定的进度条。

 myProgressBar.Style = ProgressBarStyle.Marquee; 

您还可以使用MarqueeAnimationSpeed属性来设置在整个进度条上使用小块颜色进行animation处理的时间。

要开始/停止animation,你应该这样做:

开始:

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

停止:

 progressBar1.Style = ProgressBarStyle.Continuous; progressBar1.MarqueeAnimationSpeed = 0; 

这不是他们的工作方式。 你可以通过隐藏它来“停止它”来“开始”一个选框样式的进度条。 你可以改变Style属性。

此代码是用户等待身份validation服务器响应的login表单的一部分。

 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是不合适的(或者是你正在试图控制?? – 我不认为这是可能的停止/开始这个animation,虽然你可以控制速度如@Paul所示)。

这里已经有很多很好的答案,但是你也需要记住,如果你正在UI线程上进行长时间的处理(通常是一个坏主意),那么你也不会看到选取框移动。

你可以使用一个Timer (System.Windows.Forms.Timer)。

钩住Tick事件,提前进度条,直到达到最大值。 当它达到(达到最大值)并且没有完成工作时,将进度栏值重新设置为最小值。

…就像Windows资源pipe理器:-)