/// <summary> /// 停止 /// </summary> public void Stop() { _enabledTimer = false; if (SysTimer != null) { SysTimer.Change(Timeout.Infinite, Timeout.Infinite); } }
/// <summary> /// 处理间隔服务 /// </summary> /// <param name="sender"></param> private void TimerProcess(object sender) { if (!_enabledTimer) { return; } bool timeIsUp = true; if (Config.TimerMode != TimerMode.Interval) { // 如果定时方式不是定时轮询的话,就构造TimerControl类,该类用来计算每次执行完程序后 // 到下次执行服务时需要休眠的时间 try { TimerControl = new TimerControl(Config); timeIsUp = TimerControl.TimeIsUp; // 获取是否到了执行服务程序的时间了 } catch (Exception) { // 读取配置出错且TimerControl对象已不存在,则再抛出异常 // 如果上一次读取配置成功,那就就算这次的配置有问题,则也不会停止程序的运行,仍用上一次的数据做为参数 if (TimerControl == null) { throw; } } } try { if (timeIsUp) // 时间到了可以执行程序了 { // 服务运行了 _serviceStatus = 1; // 设置计时器,在无穷时间后再启用(实际上就是永远不启动计时器了--停止计时器计时) SysTimer.Change(Timeout.Infinite, Timeout.Infinite); //开始处理服务 StartService(); } } catch (Exception ex) { // 处理服务执行过程中出现的异常 ServiceException(ex); } finally { // 如果计时器不为空,则重新设置休眠的时间 if (SysTimer != null) { if (Config.TimerMode == TimerMode.Interval) // 定时轮询设置 { // 重新启用计时器 SysTimer.Change(Config.Interval, Config.Interval); } else // 定时设置 { // 用cft类计算下一次到期的时间 TimeSpan interval = TimerControl.GetNextTimeUp(); // 重新启用计时器 SysTimer.Change(interval, interval); } } _serviceStatus = 0; } }