private SysTimer timer; // using SysTimer = System.Timers.Timer; public DelayedManualEvent() : base(true, EventResetMode.ManualReset) { timer = new SysTimer(); timer.AutoReset = false; timer.Elapsed += new ElapsedEventHandler(OnTimeout); }
static WurmLogs() { UpdateLoop = new SysTimer(); UpdateLoop.Enabled = false; UpdateLoop.Interval = UpdateInterval; UpdateLoop.AutoReset = false; UpdateLoop.Elapsed += UpdateLoop_Elapsed; }
/// <summary> /// 停止 /// </summary> public void Stop() { _enabledTimer = false; if (SysTimer != null) { SysTimer.Change(Timeout.Infinite, Timeout.Infinite); } }
public void Add(int seconds, EventHandler handler) { if (_disposed) { throw new ObjectDisposedException(string.Empty); } var timer = SysTimer.Factory(); timer.Interval = 100; timer.Elapsed += (s, e) => { timer.Interval = seconds * 1000; handler(s, e); }; timer.Start(); }
/// <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; } }