Example #1
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="tr">配置字符串</param>
 /// <param name="e">提醒回调函数</param>
 public TimedRemind(string tr, DelegateTimedDone e = null)
 {
     string[] arr = tr.Split(new char[1] {
         '|'
     });
     if (arr.Length > 5)
     {
         try
         {
             TimedMode = (EnmuTimedMode)Enum.Parse(typeof(EnmuTimedMode), arr[0], true);
             TimeLoop  = (EnmuTimeLoop)Enum.Parse(typeof(EnmuTimeLoop), arr[1], true);
             TimeDate  = Convert.ToDateTime(arr[2]);
             Mark      = arr[3];
             DateTime dtStart = Convert.ToDateTime(arr[4]);
             DateTime dtEnd   = Convert.ToDateTime(arr[5]);
             Status = EnmuTimedStatus.Ready;
             if (e != null)
             {
                 BindTimedDone(e);
             }
             Start(dtStart, dtEnd);
         }
         catch (Exception err)
         {
             Console.WriteLine(err.Message);
             Status = EnmuTimedStatus.Done;
         }
     }
     else
     {
         Status = EnmuTimedStatus.Done;
     }
 }
Example #2
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="dt">时间</param>
 /// <param name="tm">定时模式</param>
 /// <param name="tl">定时条件</param>
 /// <param name="mark">备注</param>
 public TimedRemind(DateTime dt, EnmuTimedMode tm = EnmuTimedMode.Timekeep, EnmuTimeLoop tl = EnmuTimeLoop.One, String mark = "")
 {
     TimeDate  = dt;
     TimedMode = tm;
     TimeLoop  = tl;
     Mark      = mark;
     Status    = EnmuTimedStatus.Ready;
 }
Example #3
0
 /// <summary>
 /// 停止定时
 /// </summary>
 public void Stop()
 {
     Status = EnmuTimedStatus.Done;
 }
Example #4
0
        /// <summary>
        /// 指定时间开始定时
        /// </summary>
        /// <param name="dtStart">开始时间</param>
        /// <param name="dtEnd">结束时间</param>
        /// <returns></returns>
        public bool Start(DateTime dtStart, DateTime dtEnd)
        {
            DateTime now       = DateTime.Now;
            int      delayTime = GetDelayTime(TimeDate, TimedMode);

            if (now > dtEnd)
            {
                if (TimeLoop == EnmuTimeLoop.More)
                {
                    if (TimedMode == EnmuTimedMode.Timekeep)
                    {
                        while (dtEnd <= now)
                        {
                            dtStart = dtStart.AddSeconds(delayTime);
                            dtEnd   = dtEnd.AddSeconds(delayTime);
                        }
                    }
                    else
                    {
                        dtStart = now;
                        dtEnd   = new DateTime(dtStart.Year, dtStart.Month, dtStart.Day, TimeDate.Hour, TimeDate.Minute, TimeDate.Second);
                        while (dtEnd <= dtStart)
                        {
                            dtEnd = dtEnd.AddDays(1);
                        }
                    }
                }
                else
                {
                    Status = EnmuTimedStatus.Done;
                    return(false);
                }
            }
            StartTime = dtStart;
            EndTime   = dtEnd;
            if (EndTime <= DateTime.Now)
            {
                Status = EnmuTimedStatus.Done;
                return(false);
            }
            Status      = EnmuTimedStatus.Run;
            TimedThread = new Thread(() =>
            {
                while (Status != EnmuTimedStatus.Done)
                {
                    while (EndTime >= DateTime.Now)
                    {
                        if (Status == EnmuTimedStatus.Done)
                        {
                            return;
                        }
                        Thread.Sleep(1000);
                    }
                    if (TimeLoop == EnmuTimeLoop.One)
                    {
                        Status = EnmuTimedStatus.Done;
                    }
                    if (TimeLoop == EnmuTimeLoop.More)
                    {
                        if (TimedMode == EnmuTimedMode.Timed)
                        {
                            StartTime = StartTime.AddDays(1);
                            EndTime   = EndTime.AddDays(1);
                        }
                        else
                        {
                            StartTime = DateTime.Now;
                            EndTime   = GetEndTime(TimeDate, StartTime);
                        }
                    }
                    EventTimedDone?.Invoke(this);
                }
            });
            TimedThread.Start();
            return(true);
        }