Пример #1
0
        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);
        }
Пример #2
0
        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());
                }
            }
        }