コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="state"></param>
        private void PlanTimerCallBack(Object state)
        {
            Boolean needRepeat = false;

            m_RaiseTimer.Change(Timeout.Infinite, Timeout.Infinite);
            try
            {
                //过滤那些应为触发时间过长,而无法使用线程时钟的时间间隔,转而使用1天的间隔所触发事件
                if (m_Time.ToDateTime().Date == DateTime.Now.Date)
                {
                    try
                    {
                        RaiseReminding();
                    }
                    catch { }
                    AddRemindedTime();
                    Int32 newValue = 0;
                    needRepeat = m_RepeatThreshold.TryIncrement(out newValue);
                }
                else
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(String.Format("Plan.Reminding error, {0}", ex.Message));
            }
            finally
            {
                Thread.Sleep(TimeSpanEpsilon);//由于线程时钟含有几百毫秒的误差,此处的Sleep用于调整可能出现的误差问题
                m_RaiseTimer.Change(GetNextRaisePeriod(needRepeat), RepeatInterval);
            }
        }
コード例 #2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="state"></param>
 private void PlanTimerCallBack(Object state)
 {
     m_RaiseTimer.Change(Timeout.Infinite, Timeout.Infinite);
     try
     {
         if (m_Begun == false)
         {
             //过滤那些应为触发时间过长,而无法使用线程时钟的时间间隔,转而使用1天的间隔所触发事件
             if (m_BeginTime.ToDateTime().Date == DateTime.Now.Date)
             {
                 m_Begun = true;
                 try
                 {
                     RaiseBeginning();
                 }catch {}
                 AddRemindedTime();
             }
         }
         else
         {
             if (m_EndTime.ToDateTime().Date == DateTime.Now.Date)
             {
                 m_Begun = false;
                 try
                 {
                     RaiseEnding();
                 }
                 catch { }
                 AddRemindedTime();
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(String.Format("PlanPeriod.Reminding error, {0}", ex.Message));
     }
     finally
     {
         Thread.Sleep(TimeSpanEpsilon);//由于线程时钟含有几百毫秒的误差,此处的Sleep用于调整可能出现的误差问题
         m_RaiseTimer.Change(GetNextRaisePeriod(), TimeSpan.FromDays(1));
     }
 }