using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Timers; using System.Windows.Threading; using WinThread = System.Threading; namespace Yaulw.Thread { /// /// Wrapper class around Timer Object * Multi-Threated * /// public class TTimer : IDisposable { #region Private Members private Timer _Timer = new Timer(); private bool _disposed = false; #endregion #region Construction /// /// Creates a new Multi-threaded System.Timer /// /// Event Handler for Timer /// Interval in Miliseconds /// True to start the timer upon creation, false otherwise /// A Timer Object, which should be Disposed by Caller public TTimer(ElapsedEventHandler ElapsedHandler, int IntervalMiliseconds = 1000, bool StartEnabled = false) { if (ElapsedHandler != null) { _Timer = new System.Timers.Timer(); _Timer.Elapsed += ElapsedHandler; // Set the Interval / start _Timer.Interval = IntervalMiliseconds; _Timer.Enabled = StartEnabled; if (StartEnabled) _Timer.Start(); // Keep the timer alive GC.KeepAlive(_Timer); } } /// /// Finalizer /// ~TTimer() { Dispose(true); } #endregion #region Public Methods /// /// Manually Start the Timer /// public void Start() { Stop(); // First Stop(), an existing Timer _Timer.Enabled = true; _Timer.Start(); } /// /// Manually Start the Timer at a new Interval /// /// Interval in Miliseconds public void Start(uint IntervalMiliseconds) { Stop(); // First Stop(), an existing Timer _Timer.Interval = IntervalMiliseconds; _Timer.Enabled = true; _Timer.Start(); } /// /// Manually Start the Timer at a new Interval /// /// Interval as a TimeSpan public void Start(TimeSpan tsInterval) { Stop(); // First Stop(), an existing Timer _Timer.Interval = tsInterval.TotalMilliseconds; _Timer.Enabled = true; _Timer.Start(); } /// /// Manually Stop the Timer /// public void Stop() { _Timer.Enabled = false; _Timer.Stop(); } #endregion #region IDisposable Members /// /// Dispose the Timer Object /// public void Dispose() { Dispose(true); // Use SupressFinalize in case a subclass // of this type implements a finalizer GC.SuppressFinalize(this); } /// /// Dispose the Timer Object /// /// true, if called from within protected virtual void Dispose(bool disposing) { if (!_disposed) { if (disposing) { if (_Timer != null) _Timer.Dispose(); } // Indicate that the instance has been disposed. _Timer = null; _disposed = true; } } #endregion } }