我有一个标签,应该显示我的计时器的秒数(换句话说,我有一个变量,每个计时器的间隔加1)。我的计时器间隔设置为1000,因此标签应该每秒更新一次(并且还应显示秒数)。但这个标签在数百之后已经过了1秒。什么是获得1秒的适当间隔?
int _counter = 0;
Timer timer;
timer = new Timer();
timer.Interval = 1000;
timer.Tick += new EventHandler(TimerEventProcessor);
label1.Text = _counter.ToString();
timer.Start();
private void TimerEventProcessor(object sender, EventArgs e)
{
label1.Text = _counter.ToString();
_counter += 1;
}
答案 0 :(得分:10)
获得一秒的正确间隔是1000. Interval
属性是刻度之间的时间(以毫秒为单位):
所以,这不是你设置错误的时间间隔。检查代码的其余部分,例如更改计时器的间隔或多次绑定Tick
事件。
答案 1 :(得分:5)
使用Tick
事件代替Elapsed
事件。
timer.Elapsed += new EventHandler(TimerEventProcessor);
并更改TimerEvent Processor方法的签名;
private void TimerEventProcessor(object sender, ElapsedEventArgs e)
{
label1.Text = _counter.ToString();
_counter += 1;
}
答案 2 :(得分:1)
您使用TimerEventProcessor或Counter的其他任何地方?
无论如何,你不能依赖每秒精确传递的事件。时间可能会有所不同,系统无法确保平均时间是否正确。
所以你应该使用:
而不是_Counter // when starting the timer:
DateTime _started = DateTime.UtcNow;
// in TimerEventProcessor:
seconds = (DateTime.UtcNow-started).TotalSeconds;
Label.Text = seconds.ToString();
注意:这并不能解决经常调用TimerEventProcessor的问题,或者_Counter经常增加。它只是掩盖它,但它也是正确的方法。