Windows Forms ProgressBar:启动/停止选框的最简单方法?

时间:2008-11-23 20:49:07

标签: c# winforms progress-bar

我正在使用C#和Windows Forms。我有一个正常的进度条在该程序中正常工作,但现在我有另一个操作,其中持续时间不容易计算。我想显示一个进度条,但不知道启动/停止滚动选框的最佳方法。我希望有一些简单的东西,如设置选取框速度,然后有一个start()和stop(),但它看起来并不那么简单。我必须在后台运行一个空循环吗?我该如何做到最好?感谢

7 个答案:

答案 0 :(得分:103)

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

myProgressBar.Style = ProgressBarStyle.Marquee;

您还可以使用MarqueeAnimationSpeed属性设置在您的进度条中为小块颜色设置动画所需的时间。

答案 1 :(得分:52)

要开始/停止动画,您应该这样做:

开始:

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

停止:

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

答案 2 :(得分:9)

这不是他们的工作方式。您可以通过使其显示来“启动”选框样式进度条,然后通过隐藏它来停止它。您可以更改Style属性。

答案 3 :(得分:8)

此代码是登录表单的一部分,用户在等待身份验证服务器响应。

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();
        }
    }
}    

答案 4 :(得分:2)

在MSDN上有关于此主题的代码很好article。我假设将Style属性设置为ProgressBarStyle.Marquee是不合适的(或者是你试图控制的那个?? - 我不认为可以停止/启动这个动画虽然你可以控制速度如@Paul所示。)

答案 5 :(得分:1)

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

答案 6 :(得分:-3)

您可以使用Timer(System.Windows.Forms.Timer)。

勾选它的Tick事件,然后前进然后进度条直到它达到最大值。当它(达到最大值)并且你没有完成工作时,将进度条值重置为最小值。

...就像Windows资源管理器: - )