Метод, вызываемый в определенное время - PullRequest
1 голос
/ 16 сентября 2011

У меня есть приложение-помощник, созданное с помощью символа Windows Merlin, которое будет напоминать о нескольких задачах, которые должны быть выполнены в определенное время.

Я хочу, чтобы Merlin объявил задачу в определенное заранее определенное время, скажем, 10:00.AM, который уже задан пользователем в небольшой базе данных для списка дел.

Если я проверяю каждую минуту, то он будет загружать процессор, если не меньше, то будет загружать процессор.Как этого добиться.

Если существует около 10 задач, то будет трудно сравнить каждую задачу.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

проверка каждую минуту не должна быть проблемой - ваш процессор легко справится с этим.Если вы не хотите этого делать, вы можете создать маленькую задачу , которая использует Sleep, чтобы подождать до следующего заданного времени, а затем выполнить вашу задачу в другой задаче / потоке.

Thisне следует использовать ваш процессор больше, чем нужно.

Это может быть (псевдокод) для этого:

void ScheduleNext()
{
   var tasks = GetTasksByTimeAscending();
   var nextTask = tasks.FirstOrDefault();
   if (nextTask == null) return;

   System.Threading.Task.Factory.StartNew(() => MyScheduler(nextTask));
}

void MyScheduler(MyTask task)
{
   var now = DateTime.Now;
   if (task.StartTime > now)
   {
      var timeToWait = task.StartTime.Substract(now);
      System.Threading.Thread.Sleep(timeToWait);
   }

   System.Threading.Task.Factory.StartNew(task.Action);
   ScheduleNext();
}

Конечно, вы можете добавить поддержку отмены и обработки ошибок, если хотите.

1 голос
/ 16 сентября 2011

Пара идей, поскольку я не знаю всех ваших ограничений:

  1. Используйте планировщик, такой как Quartz.net
  2. Когда создается задача, создайтетаймер, который сработает в нужное время (т.е. через 3 часа).Таким образом, вам не нужно проверять ... когда задание будет выполнено, оно уведомит вас и запустит любой код, необходимый для запуска.

Надеюсь, это даст вам достаточно идейначать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...