Получение тика системных часов в C # - PullRequest
5 голосов
/ 16 сентября 2009

Это способ выполнения delegate или event в C #, когда секунды, минуты, часы, ... изменяются в системных часах, без использования таймера, который каждую миллисекунду проверяет, изменилось ли свойство и выполняет событие с задержкой не более миллисекунды.

Поэтому я хочу избежать опроса и запустить событие в определенное время.

Ответы [ 3 ]

7 голосов
/ 16 сентября 2009

Если ваш вопрос: «Как выполнить делегата каждую полную секунду / минуту / час?»

Для минутных и часовых интервалов вы можете сделать что-то похожее на то, что показано в моем ответе на этот SO вопрос:

Это должно быть довольно точно, но не с точностью до миллисекунды.

Для вторых интервалов я бы выбрал таймер с простым интервалом в 1 секунду. С точки зрения пользователя, я думаю, что нет большой разницы, если действие выполняется в xx: xx: xx.000 или в xx: xx: xx.350.

6 голосов
/ 16 сентября 2009

Вы можете подписаться на SystemEvents.TimeChanged . Это срабатывает при изменении системных часов.

3 голосов
/ 20 декабря 2011

Я решил это в приложении для форм, установив интервал (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);
...