Получение тика смены системных часов в C#
Вопрос
Является ли это способом выполнения delegate
или event
в C #, когда секунды, минуты, часы,...изменение системных часов без использования таймера, который проверяет каждую миллисекунду, изменилось ли свойство, и выполняет событие с задержкой максимум в миллисекунду.
Таким образом, я хочу избежать опрос и запускайте событие в определенное время.
Решение
Если ваш вопрос заключается в: "Как мне выполнять делегирование каждую полную секунду / минуту / час?"
Для минутных и часовых интервалов вы могли бы сделать что-то вроде показанного в моем ответе на этот вопрос SO:
Это должно быть довольно точно, но не с точностью до миллисекунды.
Для секундных интервалов я бы выбрал Таймер с простым интервалом в 1 секунду.С точки зрения пользователя, я думаю, что нет большой разницы, выполняется ли действие в xx: xx: xx.000 или в xx: xx:xx.350.
Другие советы
Вы можете подписаться на SystemEvents.TimeChanged . Это срабатывает при изменении системных часов.
Я решил это в приложении для форм, установив интервал (1000 - DateTime.Now.Millisecond)
_timer1 = new System.Windows.Forms.Timer();
_timer1.Interval = (1000 - DateTime.Now.Millisecond);
_timer1.Enabled = true;
_timer1.Tick += new EventHandler(updateDisplayedTime);
и в обработчике событий сбросьте интервал, чтобы предотвратить смещение.
<handle event>
_timer1.Interval = (1000 - DateTime.Now.Millisecond);