public bool StopTimer() { lock (this) { if (this.IsTimerRunning) { this.IsTimerRunning = false; if (this.timerThread != null) { this.wakeTimerThreadEvent.Set(); // remark: stopping the timer does not cause the timer thread to leave the loop. if (this.timerHandler != null) { var now = DateTime.Now; var remainingPeriod = this.EndTime - now; var newHint = new TimerHint(remainingPeriod, TimerEventType.Stopped, this.name, this.ElapseProperties); try { this.timerHandler.OnTimerEvent(newHint); } catch (BaseException) { } } } } } return(this.IsTimerRunning == false); }
public bool KillTimer() { lock (this) { if (this.timerThread != null) { this.IsTimerRunning = false; this.shutdown = true; this.wakeTimerThreadEvent.Set(); this.timerThread.Join(); this.timerThread = null; if (this.timerHandler != null) { var now = DateTime.Now; var remainingPeriod = this.EndTime - now; var newHint = new TimerHint(remainingPeriod, TimerEventType.Killed, this.name, this.ElapseProperties); try { this.timerHandler.OnTimerEvent(newHint); } catch (BaseException) { } } } } return(this.timerThread == null); }
protected void Elapse() { if (this.timerHandler != null) { var newHint = new TimerHint(new TimeSpan(0), TimerEventType.Elapsed, this.name, this.ElapseProperties); try { this.timerHandler.OnTimerEvent(newHint); } catch (BaseException) { } } }
protected void Tick() { if (this.timerHandler != null) { var now = DateTime.Now; var remainingPeriod = this.EndTime - now; var newHint = new TimerHint(remainingPeriod, TimerEventType.Tick, this.name, this.TickProperties); try { this.timerHandler.OnTimerEvent(newHint); } catch (BaseException) { } } }
public bool StartTimer(TimeSpan timeSpanToSet) { if (this.IsTimerRunning) { return(false); } lock (this) { this.timeSpan = timeSpanToSet; // set new start/end time this.StartTime = DateTime.Now; this.EndTime = this.StartTime + this.timeSpan; // let the timer run !!!! this.IsTimerRunning = true; this.shutdown = false; if (this.timerThread == null) { this.wakeTimerThreadEvent.Reset(); this.timerThreadStartedEvent.Reset(); // create and start the timer thread this.timerThread = new Thread(this.TimerThread); this.timerThread.Start(this); // wait for started this.timerThreadStartedEvent.WaitOne(); } else { // restart timer this.wakeTimerThreadEvent.Set(); } if (this.timerHandler != null) { var newHint = new TimerHint(this.timeSpan, TimerEventType.Started, this.name, this.ElapseProperties); this.timerHandler.OnTimerEvent(newHint); } } return(this.IsTimerRunning); }
/// <summary> /// This method is firing the TimerEvent. /// </summary> /// <param name="hint">Hint containing information about the timer and the type of event fired.</param> internal void OnTimerEvent(TimerHint hint) { var timerEvent = this.TimerEvent; if (timerEvent != null) { EventHandlerStopTimer stopTimerDelegate = null; if (this.timerInfos.ContainsKey(hint.Name)) { stopTimerDelegate = this.timerInfos[hint.Name].StopTimer; } var timerEventArgs = new TimerEventArgs(hint, stopTimerDelegate); timerEvent(this, timerEventArgs); } }