IntervalTrigger.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.Threading;
  3. namespace MediaBrowser.Common.ScheduledTasks
  4. {
  5. /// <summary>
  6. /// Represents a task trigger that runs repeatedly on an interval
  7. /// </summary>
  8. public class IntervalTrigger : ITaskTrigger
  9. {
  10. /// <summary>
  11. /// Gets or sets the interval.
  12. /// </summary>
  13. /// <value>The interval.</value>
  14. public TimeSpan Interval { get; set; }
  15. /// <summary>
  16. /// Gets or sets the timer.
  17. /// </summary>
  18. /// <value>The timer.</value>
  19. private Timer Timer { get; set; }
  20. /// <summary>
  21. /// Stars waiting for the trigger action
  22. /// </summary>
  23. /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
  24. public void Start(bool isApplicationStartup)
  25. {
  26. DisposeTimer();
  27. Timer = new Timer(state => OnTriggered(), null, Interval, TimeSpan.FromMilliseconds(-1));
  28. }
  29. /// <summary>
  30. /// Stops waiting for the trigger action
  31. /// </summary>
  32. public void Stop()
  33. {
  34. DisposeTimer();
  35. }
  36. /// <summary>
  37. /// Disposes the timer.
  38. /// </summary>
  39. private void DisposeTimer()
  40. {
  41. if (Timer != null)
  42. {
  43. Timer.Dispose();
  44. }
  45. }
  46. /// <summary>
  47. /// Occurs when [triggered].
  48. /// </summary>
  49. public event EventHandler<EventArgs> Triggered;
  50. /// <summary>
  51. /// Called when [triggered].
  52. /// </summary>
  53. private void OnTriggered()
  54. {
  55. if (Triggered != null)
  56. {
  57. Triggered(this, EventArgs.Empty);
  58. }
  59. }
  60. }
  61. }