using System.Timers; namespace MtApi.Monitors.Triggers { public class TimeElapsedTrigger : IMonitorTrigger { #region Fields readonly System.Timers.Timer _timer; #endregion #region Properties /// /// Interval for raising the trigger /// public TimeSpan Interval { get => TimeSpan.FromMilliseconds(_timer.Interval); set => _timer.Interval = value.TotalMilliseconds; } /// /// Returns true if the trigger is started, otherwise false /// public bool IsStarted => _timer.Enabled; /// /// If true, the trigger will raise continuosly after elapsed , otherwise the trigger will raise only once after elapsed . /// public bool AutoReset { get => _timer.AutoReset; set => _timer.AutoReset = value; } #endregion #region Events /// /// Returns true if the trigger is started, otherwise false /// public event EventHandler? Raised; #endregion #region ctor /// /// Constructor for initializing TimeElapsedTrigger /// /// Defines the interval for raising the event. /// If true, the trigger will raise continuosly after elapsed , otherwise the trigger will raise only once after elapsed . public TimeElapsedTrigger(TimeSpan time, bool autoReset = true) { _timer = new System.Timers.Timer(time.TotalMilliseconds); _timer.Elapsed += _timer_Elapsed; AutoReset = autoReset; } #endregion #region Public methods /// /// Starts the trigger /// public void Start() => _timer.Start(); /// /// Stops the trigger /// public void Stop() => _timer.Stop(); #endregion #region private methods private void _timer_Elapsed(object? sender, ElapsedEventArgs e) { _timer.Elapsed -= _timer_Elapsed; Raised?.Invoke(this, EventArgs.Empty); _timer.Elapsed += _timer_Elapsed; } #endregion } }