Интервал Таймера 1000!= 1 секунда?

У меня есть метка, которая должна показывать секунды моего таймера (или, другими словами, у меня есть переменная, к которой добавляется 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 ответов


правильный интервал для получения одной секунды составляет 1000. The Interval собственность-это время между тиками в миллисекундах:

MSDN: таймер.Свойство Интервала

таким образом, это не интервал, который вы установили, это неправильно. Проверьте остальную часть кода на что-то вроде изменения интервала таймера или привязки Tick событие несколько раз.


вместо Tick событие, используйте Elapsed событие.

timer.Elapsed += new EventHandler(TimerEventProcessor);

и изменить signiture метода TimerEventProcessor;

private void TimerEventProcessor(object sender, ElapsedEventArgs e)
{
  label1.Text = _counter.ToString();
  _counter += 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 увеличивается до Часто. это просто маскирует его, но это также и правильный способ сделать это.