예제 #1
0
        /// <summary>
        ///     Initialize Requirement
        ///     Set timer
        /// </summary>
        /// <param name="addNewSchedule">Specify add new Schedule</param>

        #region Initialize

        private void Initialize(bool addNewSchedule)
        {
            if (addNewSchedule)
            {
                // Set Identity
                _ScheduleItem          = new G9ScheduleItem.G9ScheduleItem();
                _ScheduleItem.Identity = ScheduleIdentity = Guid.NewGuid();

                // Add schedule
                SaveScheduleTask.Add(ScheduleIdentity, _ScheduleItem);
            }

            if (!_activeSchedule)
            {
                _activeSchedule = true;
                Task.Run(async() =>
                {
                    while (true)
                    {
                        // Check Schedule handler method finished or no
                        if (_waitForFinishScheduleHandler)
                        {
                            // if not finished Delay and check again
                            await Task.Delay(1);
                        }
                        else
                        {
                            // if finished run Schedule handler again and wait
                            await ScheduleHandler();
                            await Task.Delay(1);
                        }
                    }
                });
            }
        }
예제 #2
0
        /// <summary>
        ///     Constructor - Restore Schedule by identity
        ///     Initialize Requirement
        /// </summary>
        /// <param name="ScheduleIdentity">Specify Schedule identity for restore enable Schedule</param>

        #region G9Scheduled

        public G9Schedule(Guid ScheduleIdentity)
        {
            if (!SaveScheduleTask.ContainsKey(ScheduleIdentity))
            {
                throw new Exception("Schedule not found!");
            }

            _ScheduleItem         = SaveScheduleTask[ScheduleIdentity];
            this.ScheduleIdentity = ScheduleIdentity;

            Initialize(false);
        }
예제 #3
0
        /// <summary>
        ///     Dispose this Schedule
        /// </summary>

        #region Dispose

        public void Dispose()
        {
            if (SaveScheduleTask[ScheduleIdentity].DisposeCallBack == null)
            {
                SaveScheduleTask[ScheduleIdentity].DisposeCallBack = new HashSet <Action>();
            }
            foreach (var action in SaveScheduleTask[ScheduleIdentity].DisposeCallBack)
            {
                action?.Invoke();
            }
            SaveScheduleTask.Remove(ScheduleIdentity);

            ScheduleIdentity = Guid.Empty;
            _ScheduleItem    = null;
        }