private TimeInfo GetLatestRunTime(TimeInfo last) { if (Task.StartTimes == null || Task.StartTimes.Count == 0) { return(new TimeInfo(99, 99)); } TimeInfo min = null; int num = 0; foreach (TimeInfo time in Task.StartTimes) { if (last == null) { if (CompareTo(time, DateTime.Now) >= 0) { if (min == null) { min = time; num = min.LeftMinutes(DateTime.Now); } else { if (num > time.LeftMinutes(DateTime.Now)) { min = time; num = time.LeftMinutes(DateTime.Now); } } } } else { if (CompareTo(time, DateTime.Now) >= 0 && time.Minute > last.Minute) { if (min == null) { min = time; num = min.LeftMinutes(DateTime.Now); } else { if (num > time.LeftMinutes(DateTime.Now)) { min = time; num = time.LeftMinutes(DateTime.Now); } } } } } if (min == null) { min = Task.StartTimes[0]; } return(min); }
public void TaskStart() { try { _module = Constants.MSG_TASK; int num = 0; if (Task.RunMode == EnumRunMode.MultiLoop || Task.RunMode == EnumRunMode.SingleLoop) { SetMessageLn("开始执行循环任务..."); if (Task.RunMode == EnumRunMode.SingleLoop) { _singleloopfirst = true; } if (Task.Forbidden) { num = DurationMinute(new TimeInfo(DateTime.Now.Hour, DateTime.Now.Minute)); if (num > 0) { while (num > 0) { _module = Constants.MSG_TASK; TaskWait(string.Format("距离{0}还有{1}分钟...", AddZero(Task.ForbiddenEnd.Hour) + ":" + AddZero(Task.ForbiddenEnd.Minute), num--)); Thread.Sleep(0xea60); } } TaskRun(); while (Task.RoundTime > 0) { int dur = DurationMinute(GetNextRunTime()); num = Task.RoundTime + dur; while (num > 0) { _module = Constants.MSG_TASK; if (dur > 0) { TaskWait(string.Format("距离{0}还有{1}分钟...", AddZero(Task.ForbiddenEnd.Hour) + ":" + AddZero(Task.ForbiddenEnd.Minute), num--)); } else { TaskWait(string.Format("{0}分钟后重新启动任务...", new object[] { num-- })); } Thread.Sleep(0xea60); } TaskRun(); } } else { _module = Constants.MSG_TASK; TaskRun(); while (Task.RoundTime > 0) { num = Task.RoundTime; while (num > 0) { TaskWait(string.Format("{0}分钟后重新启动任务...", new object[] { num-- })); Thread.Sleep(0xea60); } TaskRun(); } } } else if (Task.RunMode == EnumRunMode.Timing) { TimeInfo lastrun = null; SetMessageLn("开始执行定时任务..."); while (true) { TimeInfo runtime = GetLatestRunTime(lastrun); if (runtime.CompareTo(new TimeInfo(99, 99)) == 0) { return; } num = runtime.LeftMinutes(DateTime.Now); if (num == 0) { lastrun = runtime; TaskRun(); } else { while (num > 0) { _module = Constants.MSG_TASK; TaskWait(string.Format("距离{0}还有{1}分钟...", AddZero(runtime.Hour) + ":" + AddZero(runtime.Minute), num--)); Thread.Sleep(0xea60); } lastrun = runtime; TaskRun(); } } } } catch (ThreadAbortException) { //LogHelper.Write("TaskManager.TaskStart", "ThreadAbortException", LogSeverity.Info); SetMessageLn("中止执行!"); if (Task.WriteLogToFile) { TraceLog.WriteLogToFile(Task.TaskName, this.ExecutionLog.ToString()); } } catch (ThreadInterruptedException) { //LogHelper.Write("TaskManager.TaskStart", "ThreadInterruptedException", LogSeverity.Info); SetMessageLn("中止执行!"); if (Task.WriteLogToFile) { TraceLog.WriteLogToFile(Task.TaskName, this.ExecutionLog.ToString()); } } catch (Exception ex) { LogHelper.Write("TaskManager.TaskStart", ex); SetMessageLn("发生异常,任务已中止!错误:" + ex.Message); if (Task.WriteLogToFile) { TraceLog.WriteLogToFile(Task.TaskName, this.ExecutionLog.ToString()); } } }