我正在构建一个应用程序,该应用程序实际上以数据库中列出的特定间隔运行一系列程序。
可以通过3种方式安排程序:
当使用单一类型的时间表运行单个程序时,我的程序可以完美运行并在正确的时刻进行时间表。 但是,当我尝试一次运行多个程序和一种以上类型的计划时,似乎出现了问题。 日程安排变得极为不稳定,并多次打开同一程序,或者运行过去在特定时间安排的程序。 我有一个函数,可以计算出下一个事件的确切毫秒数。在调试中,每次执行计算以及针对哪个程序时,我都会将此函数日志记录下来,并且在仔细检查这些日志后,它可以正常运行...这使我相信初始化计时器的方式可能有问题
这在我计划的任务类中,该类运行程序并创建下一个计时器:
public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
{
taskSchedule.process = System.Diagnostics.Process.Start(SystemFunctions.getFullExePath(taskSchedule));
SystemFunctions.setLastTimeTaskRun(taskSchedule.id, DateTime.Now);
taskSchedule.lastRun = DateTime.Now;
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = SystemFunctions.determineNextTaskEvent(taskSchedule);
timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);
timer.Start();
taskSchedule.timerservice = timer;
}
每次为每个程序和该程序的每个计划创建此类的新版本。因此,每个计时器和程序都独立运行。
这是实例化“计划任务”类的方式:
private void startScheduledTasks()
{
List<TaskSchedule> taskSchedule = SystemFunctions.getTaskSchedules();
if (taskSchedule != null)
{
foreach (TaskSchedule currentTask in taskSchedule)
{
ScheduledTask scheduledTask = new ScheduledTask();
scheduledTask.taskSchedule = currentTask;
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = SystemFunctions.determineNextTaskEvent(currentTask);
timer.Elapsed += new System.Timers.ElapsedEventHandler(scheduledTask.OnTimer);
timer.Start();
currentTask.timerservice = timer;
scheduledTasks.Add(scheduledTask);
}
}
}
就像我说的那样,我已验证从SystemFunctions.determineNextTaskEvent(currentTask);
收到的短信是正确的...
有人知道什么可能导致这种行为吗?