进度条达到最大值但动画未完成
Progress bar reaches maximum but animation does not complete
进度条 (Rollbar) 在达到最大值之前不会完成,即使我做了一个 if 语句,它只会 return 它一旦完成。
[编辑:我尝试了 David Heffernan's answer,现在快要结束了,但还没有结束。]
我知道 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; }));
}
进度条 (Rollbar) 在达到最大值之前不会完成,即使我做了一个 if 语句,它只会 return 它一旦完成。
[编辑:我尝试了 David Heffernan's answer,现在快要结束了,但还没有结束。]
我知道 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; }));
}