private void StartTimer() { if (this.m_eventTimer == null) { using (AutoResetEvent autoEvent = new AutoResetEvent(true)) { TimeSpan delayTime = new TimeSpan(0, 0, 0, 5, 0); TimeSpan timerInterval = new TimeSpan(0, 0, 0, Config.TimerIntervalSeconds, 0); this.m_eventTimer = new Timer(new TimerCallback(this.OnTimerEvent), autoEvent, delayTime, timerInterval); } } } private void StopTimer() { if (this.m_eventTimer != null) { this.m_eventTimer.Dispose(); this.m_eventTimer = null; } } private void OnTimerEvent(object stateInfo) { this.StopTimer(); // More code }I can't this is any better or worse than any of the other alternatives (I've just been using this pattern for quite a while).