在特定时间调用的方法

时间:2011-09-16 05:18:14

标签: c# .net winforms

我有一个使用Windows Merlin角色创建的任务助手应用程序,它将提醒在特定时间完成的几项任务。

我希望Merlin在特定的预定义时间(例如10:00 AM)宣布任务,该时间已由用户在小待办事项列表数据库中设置。

如果我每分钟检查一次,那么它会淹没CPU,如果不是至少它将使CPU忙碌。如何实现这一点。

如果大约有10个任务,则很难比较每个任务。

2 个答案:

答案 0 :(得分:2)

每分钟检查应该没问题 - 你的CPU会轻松处理这个问题。 如果你不想这样做,你可以创建一个小的Task,它使用Sleep等待下一个预定义的时间,然后在另一个任务/线程中执行你的任务。

这不应该使用超过需要的CPU。

这可能是(伪代码)这样​​做:

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 :(得分:1)

一些想法,因为我不知道你所有的约束:

  1. 使用Quartz.net等调度程序
  2. 创建任务时,创建一个定时器,该定时器将在适当的时间触发(即从现在起3小时后)。这样,你就不必检查......当任务到期时,它会通知你并运行它需要运行的任何代码。
  3. 希望这能让你有足够的想法开始。