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;
        }