Skip to content

Instantly share code, notes, and snippets.

@chtenb
Created December 17, 2015 11:02
Show Gist options
  • Select an option

  • Save chtenb/36bb3a2d2ac7dd511b96 to your computer and use it in GitHub Desktop.

Select an option

Save chtenb/36bb3a2d2ac7dd511b96 to your computer and use it in GitHub Desktop.

Revisions

  1. chtenb created this gist Dec 17, 2015.
    81 changes: 81 additions & 0 deletions alarmevent.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,81 @@
    namespace AlarmNamespace
    {
    public class AlarmEventArgs : EventArgs
    {
    private DateTime alarmTime;
    private bool snoozeOn = true;

    public AlarmEventArgs (DateTime time)
    {
    this.alarmTime = time;
    }

    public DateTime Time
    {
    get { return this.alarmTime; }
    }

    public bool Snooze
    {
    get { return this.snoozeOn; }
    set { this.snoozeOn = value; }
    }
    }

    public class Alarm
    {
    private DateTime alarmTime;
    private int interval = 10;

    public delegate void AlarmEventHandler (object sender, AlarmEventArgs e);

    public event AlarmEventHandler AlarmEvent;

    public Alarm (DateTime time)
    : this (time, 10)
    {
    }

    public Alarm (DateTime time, int interval)
    {
    this.alarmTime = time;
    this.interval = interval;
    }

    public void Set ()
    {
    while (true)
    {
    System.Threading.Thread.Sleep (100);
    DateTime currentTime = DateTime.Now;
    // Test whether it is time for the alarm to go off.
    if (currentTime.Hour == alarmTime.Hour &&
    currentTime.Minute == alarmTime.Minute)
    {
    AlarmEventArgs args = new AlarmEventArgs (currentTime);
    OnAlarmEvent (args);
    if (!args.Snooze)
    return;
    else
    this.alarmTime = this.alarmTime.AddMinutes (this.interval);
    }
    }
    }

    protected void OnAlarmEvent (AlarmEventArgs e)
    {
    AlarmEvent (this, e);
    }

    static void Main ()
    {
    Alarm a = new Alarm (DateTime.Now.AddSeconds(1));
    a.AlarmEvent += (o, e) => Console.WriteLine (1);
    a.AlarmEvent += (o, e) => Console.WriteLine (2);
    a.AlarmEvent = (o, e) => Console.WriteLine (3);

    a.Set ();
    Console.Read ();
    }
    }
    }