我正在使用 C# 和 Windows 窗体。我在程序中有一个正常的进度条工作正常,但现在我有另一个操作无法轻松计算持续时间。我想显示一个进度条,但不知道启动/停止滚动选取框的最佳方式。我希望有一些简单的东西,比如设置选取框速度,然后有一个 start() 和 stop() ,但它似乎并不那么简单。我必须在后台运行一个空循环吗?我怎样才能最好地做到这一点?谢谢
kramed
问问题
226562 次
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
这不是他们的工作方式。您通过使其可见来“启动”选取框样式的进度条,通过隐藏它来停止它。您可以更改 Style 属性。
于 2008-11-23T21:52:00.157 回答
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 回答
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 回答