//------------------------------
 /// <summary>
 /// 添加或更新一个任务,如果已存在(TaskID),则会将其加入
 /// </summary>
 public static void AddTask(M_Content_ScheTask scheMod)
 {
     //已完成或禁用任务不进入初始化队例
     if (scheMod.Status != 0)
     {
         return;
     }
     if (scheMod.ID < 1)
     {
         TaskList.Add(TaskCenter.CreateTask(scheMod));
     }
     else
     {
         BaseTask model = TaskList.FirstOrDefault(p => p.scheMod.ID == scheMod.ID);
         if (model != null)
         {
             TaskCenter.RemoveTask(model.scheMod.ID);
         }
         model = TaskCenter.CreateTask(scheMod);
         TaskList.Add(model);
         model.Start();
     }
 }
Exemple #2
0
        // 到达时间,执行任务
        protected void _timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            try
            {
                bool flag = false;
                switch (scheMod.ExecuteType)
                {
                case (int)M_Content_ScheTask.ExecuteTypeEnum.JustOnce:
                    if (DateTime.Now >= scheMod.ExecuteTime2 && scheMod.Status == 0)
                    {
                        ExecuteFunc(sender, e);
                        flag = true;
                        //scheMod.Status = 100;
                        //DBCenter.UpdateSQL(scheMod.TbName, "Status=100", "ID=" + scheMod.ID);
                        TaskCenter.RemoveTask(scheMod.ID);
                    }
                    break;

                case (int)M_Content_ScheTask.ExecuteTypeEnum.EveryDay:
                    //已到时间,且今天未执行过
                    if (string.IsNullOrEmpty(scheMod.LastTime) || scheMod.LastTime2.DayOfYear != DateTime.Now.DayOfYear)
                    {
                        if (DateTime.Now >= scheMod.ExecuteTime2)
                        {
                            ExecuteFunc(sender, e);
                            flag = true;
                        }
                    }
                    break;

                case (int)M_Content_ScheTask.ExecuteTypeEnum.Interval:
                {
                    ExecuteFunc(sender, e);
                    flag = true;
                }
                break;

                case (int)M_Content_ScheTask.ExecuteTypeEnum.EveryMonth:
                {
                    //未执行过,或当本月未执行过
                    if (string.IsNullOrEmpty(scheMod.LastTime) || scheMod.LastTime2.Month != DateTime.Now.Month)
                    {
                        DateTime time = Convert.ToDateTime(DateTime.Now.ToString("yyyy/MM/") + scheMod.ExecuteTime2.ToString("dd HH:mm:ss"));
                        if (DateTime.Now >= time)
                        {
                            ExecuteFunc(sender, e);
                            flag = true;
                        }
                    }
                }
                break;
                }
                if (flag)
                {
                    //更新任务状态和执行日志
                    scheMod.LastTime = DateTime.Now.ToString();
                    DBCenter.UpdateSQL(scheMod.TbName, "LastTime='" + DateTime.Now + "'", "ID=" + scheMod.ID);
                    M_Content_ScheLog logMod = new M_Content_ScheLog();
                    logMod.TaskID   = scheMod.ID;
                    logMod.TaskName = scheMod.TaskName;
                    logMod.Result   = 1;
                    logBll.Insert(logMod);
                }
            }
            catch (Exception ex) { ZLLog.L("TaskCenter-->[" + scheMod.TaskName + "]出错,原因" + ex.Message); }
        }