进度条达到最大值但动画未完成

Progress bar reaches maximum but animation does not complete

进度条 (Rollbar) 在达到最大值之前不会完成,即使我做了一个 if 语句,它只会 return 它一旦完成。

[编辑:我尝试了 David Heffernan's answer,现在快要结束了,但还没有结束。]

What it looks like

我知道 if 语句看起来很奇怪,但这就是我解释答案的方式

        private void Bartimer_Tick(object sender, EventArgs e)
        {
            if (Rollbar.Value == 1000)
            {
                Rollbar.Value = 1000;
                Rollbar.Increment(-1);
                Rollbar.Value = 0;
                Bartimer.Stop();
            }
            else
            {
                Rollbar.Increment(1);
            }
        }

        private void Rollbtn_Click(object sender, EventArgs e)
        {
            Rollbar.Minimum = 0;
            Rollbar.Maximum = 1000;
            Bartimer.Start();
        }

感觉跟动画速度或者定时器间隔有关系

我也已经以不同的方式解决了这个问题,方法是在条形图达到 0 后尝试停止计时器,但没有任何变化。

如有任何建议,我们将不胜感激。

除了使用Timer,你可以尝试通过Thread来实现。这是一个演示,也许你可以参考。使用Thread.Sleep模拟Timer.Interval.

private void button1_Click(object sender, EventArgs e)
{
    Rollbar.Minimum = 0;
    Rollbar.Maximum = 1000;

    Thread thread = new Thread(new ThreadStart((delegate
    {
        for (int i = 1; i <= 1000; i++)
        {
            Rollbar.Invoke(new MethodInvoker(delegate { Rollbar.Value = i; }));
            Thread.Sleep(100);
        }
    })));
    thread.Start();
}

更新:使用任务

private void button1_Click(object sender, EventArgs e)
{
    Rollbar.Minimum = 0;
    Rollbar.Maximum = 1000;

    var task = new Task(() =>
    {
        for (int i = 1; i <= 1000; i++)
        {
            Rollbar.Invoke(new MethodInvoker(delegate { Rollbar.Value = i; }));
            Thread.Sleep(100);
        }
    });
    task.Start();
    task.ContinueWith(t => Reset());
}

void Reset()
{
    Thread.Sleep(1000);
    Rollbar.Invoke(new MethodInvoker(delegate { Rollbar.Value = 0; }));
}