好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

ScheduleTimer

ScheduleTimer

1.引言

Scheduled Timer将定时器Timer进行封装成ScheduledTimer,很多Timer暴露的成员,都以私有化,并将上一节中的 定时器作业(TimerJob) 进行了集成。

2.ScheduledTimer

代码很简单,直接上代码

     public   class   ScheduleTimer
    {
          public  IEventStorage EventStorage =  new   LocalEventStorage();
          public   event   ExceptionEventHandler Error; 
         private   static  TimeSpan MAX_INTERVAL =  new  TimeSpan( 0 ,  1 ,  0  );
          private   DateTime _LastTime;
          private   Timer _Timer;
          private   TimerJobList _Jobs;
          private   volatile   bool   _StopFlag;

          public   ScheduleTimerBase()
        {
            _Timer  =  new   Timer(); 
            _Timer.AutoReset =  false  ; 
            _Timer.Elapsed +=  new   ElapsedEventHandler(Timer_Elapsed);
            _Jobs  =  new   TimerJobList();
            _LastTime  =  DateTime.MaxValue;
        }
 
         public   void  AddJob(IScheduledItem schedule, Delegate f,  params   object  [] Params)
        {
            _Jobs.Add(  new  TimerJob(schedule,  new   DelegateMethodCall(f, Params)));
        }
 
         public   void  AddAsyncJob(IScheduledItem schedule, Delegate f,  params   object  [] Params)
        {
            TimerJob Event  =  new  TimerJob(schedule,  new   DelegateMethodCall(f, Params));
            Event.SyncronizedEvent  =  false  ;
            _Jobs.Add(Event);
        }      
         public   void   AddJob(TimerJob Event)
        {
            _Jobs.Add(Event);
        }
 
         public   void   ClearJobs()
        {
            _Jobs.Clear();
        }
 
         public   void   Start()
        {
            _StopFlag  =  false  ;
            QueueNextTime(EventStorage.ReadLastTime());
        }
 
         public   void   Stop()
        {
            _StopFlag  =  true  ;
            _Timer.Stop();
        }

          public   void   Dispose()
        {
              if  (_Timer !=  null  )
                _Timer.Dispose();
        }
 
         private   double   NextInterval(DateTime thisTime)
        {
            TimeSpan interval  = _Jobs.NextRunTime(thisTime) -  thisTime;
              if  (interval >  MAX_INTERVAL)
                interval  =  MAX_INTERVAL;

              return  (interval.TotalMilliseconds ==  0 ) ?  1   : interval.TotalMilliseconds;
        }

          private   void   QueueNextTime(DateTime thisTime)
        {
            _Timer.Interval  =  NextInterval(thisTime);
            System.Diagnostics.Debug.WriteLine(_Timer.Interval);
            _LastTime  =  thisTime;
            EventStorage.RecordLastTime(thisTime);
            _Timer.Start();
        }

          private   void  Timer_Elapsed( object   sender, ElapsedEventArgs e)
        {
              try  
            {
                  if  (_Jobs ==  null  )
                      return  ;

                _Timer.Stop();

                  foreach  (TimerJob Event  in   _Jobs.Jobs)
                {
                      try  
                    {
                        Event.Execute(  this  , _LastTime, e.SignalTime, Error);
                    }
                      catch   (Exception ex)
                    {
                        OnError(DateTime.Now, Event, ex);
                    }
                }
            }
              catch   (Exception ex)
            {
                OnError(DateTime.Now,   null  , ex);
            }
              finally  
            {
                  if  (_StopFlag ==  false  )
                    QueueNextTime(e.SignalTime);
            }
        }

          private   void   OnError(DateTime eventTime, TimerJob job, Exception e)
        {
              if  (Error ==  null  )
                  return  ;

              try  
            {
                Error(  this ,  new   ExceptionEventArgs(eventTime, e));
            }
              catch   (Exception) { }
        }
    } 

暴露出的成员很简单,有事件存储、异常事件、启动、停止、添加作业、清空作业。

简单介绍一下流程:

声明一个ScheduleTimer 添加一个作业 启动定时器Start方法,EventStorage.ReadLastTime() 读取事件持久化时间,设置间隔时间 执行Timer的Elapsed事件,执行Job,记录 EventStorage

各个成员具体执行,请看之前的各个章节介绍。

3.总结

Scheduled Timer基本介绍了,还有一些 异常事件、回调事件没有介绍,都很简单,下面一个章节,将会进行总结一下。

作者: Qlin  
出处: http://www.cnblogs.com/qqlin/  
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

分类:  Scheduled Timer

标签:  timer

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于ScheduleTimer的详细内容...

  阅读:47次