定时器间隔1000!= 1秒?

时间:2013-01-18 09:17:24

标签: c# timer seconds

我有一个标签,应该显示我的计时器的秒数(换句话说,我有一个变量,每个计时器的间隔加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;
}

3 个答案:

答案 0 :(得分:10)

获得一秒的正确间隔是1000. Interval属性是刻度之间的时间(以毫秒为单位):

MSDN: Timer.Interval Property

所以,这不是你设置错误的时间间隔。检查代码的其余部分,例如更改计时器的间隔或多次绑定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经常增加。它只是掩盖它,但它也是正确的方法。