.NETMF TimerCallback с различными временными интервалами? - PullRequest
3 голосов
/ 07 февраля 2012

Я пытаюсь заставить таймер срабатывать два раза в день, вместо постоянного времени. Я хочу вызвать обратный вызов, скажем, в 07:00 и снова в 16:00, а затем повторить на следующий день в 07:00.

По какой-то причине это ускользает от меня, это не кажется таким уж сложным, но я думаю, что мне нужно создавать новый Таймер каждый день и убивать его до конца дня?

Ответы [ 4 ]

4 голосов
/ 07 февраля 2012

Почему бы просто не иметь таймер, который срабатывает каждый час, а затем реагировать только на события в 7:00 и 16:00?

var timer = new Timer(TimeSpan.FromHours(1).TotalMilliseconds);
timer.Elapsed += TimerHandler;

void TimerHandler(object sender, EventArgs e) {
  var hour = DateTime.Now.Hour;
  if (hour != 7 && hour != 16) {
    return;
  }
  ...
}
1 голос
/ 07 февраля 2012

Вам действительно нужно использовать длительный таймер для достижения этой цели?Если вы ожидаете выполнения определенной задачи, возможно, лучше написать консольное приложение, которое будет делать все, что вам нужно.Затем вы можете настроить запланированное задание для запуска приложения в любое время;см http://windows.microsoft.com/en-US/windows7/schedule-a-task.

0 голосов
/ 07 сентября 2015

На основании информации в этой теме я решил создать библиотеку "планировщика" для NETMF. В реализации он похож на шаблон таймера, но основан на TimeDate для указания события.

Вы можете получить библиотеку в https://github.com/pelogical/mfschedule

0 голосов
/ 07 февраля 2012

Может быть, это хорошая идея, чтобы запускать его каждый час и проверять обратный вызов, если необходимые функции должны быть выполнены.Когда позже вы решите изменить время или даже изменить количество триггеров в день, это можно сделать в одном месте без повторного создания таймера.

Например, передать список в класс таймера (расширенный), который хранит время, когда нужно что-то делать, и проверять этот список каждый час.

...