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