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理器:-)