Интервал Таймера 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 увеличивается до Часто. это просто маскирует его, но это также и правильный способ сделать это.