public void Start() { m_isCancel = false; if (m_task == null) { m_task = m_taskFactory.StartNew(() => { while (true && !m_isCancel) { List <TimerTask> listFunc = m_taskList.Where(t => MatchTime(t.ExcuteTime, DateTime.Now)).ToList(); foreach (TimerTask task in listFunc) { switch (task.Mode) { case 0: { m_taskList.Remove(task); } break; case 1: { task.ExcuteTime = task.ExcuteTime.AddDays(1); } break; case 2: { task.ExcuteTime = task.ExcuteTime.AddHours(1); } break; case 3: { task.ExcuteTime = task.ExcuteTime.AddMinutes(1); } break; } m_taskFactory.StartNew(() => { TimerTask _this = task; _this.CallBack(); }); } Thread.Sleep(1000); } m_task = null; }); } }
public void AddTask(int minute, bool isRepeat, TimeExcuteFunc callBack) { DateTime dateTime; TimerTask timerTask = new TimerTask(); timerTask.CallBack = callBack; timerTask.Mode = isRepeat ? 3 : 0; if (isRepeat) { dateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, minute, 0); if (dateTime < DateTime.Now) { dateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour + 1, minute, 0); } timerTask.Mode = 3; } else { dateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, minute, 0); timerTask.Mode = 0; } timerTask.ExcuteTime = dateTime; }