private void CheckSchedule(object o)
        {
            //  Iterate the meeting list and check if any meeting need to do anythingk

            const double meetingTimeEpsilon = 0.0001;

            foreach (Meeting m in Meetings)
            {
                eMeetingEventChangeType changeType = eMeetingEventChangeType.Unkown;

                if (m.TimeToMeetingStart.TotalMinutes <= m.MeetingWarningMinutes.TotalMinutes)       // Meeting is about to start
                {
                    changeType = eMeetingEventChangeType.MeetingStartWarning;
                }
                else if (Math.Abs(m.TimeToMeetingStart.TotalMinutes) < meetingTimeEpsilon)           // Meeting Start
                {
                    changeType = eMeetingEventChangeType.MeetingStart;
                }
                else if (m.TimeToMeetingEnd.TotalMinutes <= m.MeetingWarningMinutes.TotalMinutes)    // Meeting is about to end
                {
                    changeType = eMeetingEventChangeType.MeetingEndWarning;
                }
                else if (Math.Abs(m.TimeToMeetingEnd.TotalMinutes) < meetingTimeEpsilon)             // Meeting has ended
                {
                    changeType = eMeetingEventChangeType.MeetingEnd;
                }

                if (changeType != eMeetingEventChangeType.Unkown)
                {
                    OnMeetingChange(changeType, m);
                }
            }
        }
        private void OnMeetingChange(eMeetingEventChangeType changeType, Meeting meeting)
        {
            var handler = MeetingEventChange;

            if (handler != null)
            {
                handler(this, new MeetingEventArgs()
                {
                    ChangeType = changeType, Meeting = meeting
                });
            }
        }