예제 #1
0
        public void AddScheduledJobs()
        {
            int numScheduledTimes = this.ScheduledTimes.Count;
            for (int iScheduledTimeSpec = 0; iScheduledTimeSpec < numScheduledTimes; iScheduledTimeSpec++)
            {
                this.RemoveScheduledTimeSpecificationAt(0);
            }

            DateTime startTime = DateTime.Now;

            foreach (IScheduledJobSpecification scheduledJobSpec in this.ScheduledJobsListSource.ScheduledJobs)
            {
                ScheduledTimeSpecification curTimeSpec = new ScheduledTimeSpecification();
                curTimeSpec.ScheduledJob = scheduledJobSpec;
                curTimeSpec.ScheduledTime = curTimeSpec.ScheduledJob.ScheduleSpecification.CalculateNextScheduledTime(startTime, this.DateOperationsProvider);

                this.AddScheduledTimeSpecification(curTimeSpec);
            }
        }
        public void CreateScheduledTimeSpecifications()
        {
            // Foreach scheduled job specification from the IScheduledJobSpecificationsListSource.
                // Starting at the StartDate, going to the EndDate, continue rescheduling each job until the scheduled time is past the start date.

            this.ScheduledTimeSpecifications.Clear();

            List<IScheduledJobSpecification> scheduledJobSpecs = this.ScheduledJobSpecificationsListSource.ScheduledJobs;
            foreach (IScheduledJobSpecification curScheduledJobSpec in scheduledJobSpecs)
            {
                DateTime curScheduledTime = this.StartDate;
                while (this.EndDate > curScheduledTime)
                {
                    curScheduledTime = curScheduledJobSpec.ScheduleSpecification.CalculateNextScheduledTime(curScheduledTime, this.DateOperationsProvider);
                    ScheduledTimeSpecification curScheduledTimeSpec = new ScheduledTimeSpecification();
                    this.ScheduledTimeSpecifications.Add(curScheduledTimeSpec);

                    curScheduledTimeSpec.ScheduledTime = curScheduledTime;
                    curScheduledTimeSpec.ScheduledJob = curScheduledJobSpec;
                }
            }
        }
예제 #3
0
 private void OnScheduledTimeAdded(ScheduledTimeSpecification scheduledTimeSpecification)
 {
     if (null != this.ScheduledTimeSpecificationAdded)
     {
         this.ScheduledTimeSpecificationAdded(this, new ScheduledTimeSpecificationListChangedEventArgs(scheduledTimeSpecification));
     }
 }
예제 #4
0
        private void AddScheduledTimeSpecification(ScheduledTimeSpecification scheduledTimeSpecification)
        {
            this.ScheduledTimes.Add(scheduledTimeSpecification);

            this.OnScheduledTimeAdded(scheduledTimeSpecification);
        }
예제 #5
0
        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            // Clear so that new timer can be created.
            ((Timer)sender).Elapsed -= Timer_Elapsed;

            DateTime now = DateTime.Now;

            List<ScheduledTimeSpecification> nextScheduledTimes = new List<ScheduledTimeSpecification>();
            for (int iScheduledTime = 0; iScheduledTime < this.ScheduledTimes.Count; iScheduledTime++)
            {
                // Get the first scheduled job.
                ScheduledTimeSpecification curScheduledTimeSpec = this.ScheduledTimes[0];

                // Items are sorted by scheduled time. If we get to the point where we need not go further, don't go further.
                if (TimeSpan.Zero < curScheduledTimeSpec.ScheduledTime - now)
                {
                    break;
                }

                // Remove the first scheduled job.
                this.RemoveScheduledTimeSpecificationAt(0);

                // Create the next item.
                ScheduledTimeSpecification nextScheduledTimeSpec = new ScheduledTimeSpecification();
                nextScheduledTimeSpec.ScheduledJob = curScheduledTimeSpec.ScheduledJob;
                nextScheduledTimeSpec.ScheduledTime = nextScheduledTimeSpec.ScheduledJob.ScheduleSpecification.CalculateNextScheduledTime(now, this.DateOperationsProvider);

                nextScheduledTimes.Add(nextScheduledTimeSpec);

                this.JobRepository.Add(curScheduledTimeSpec.ScheduledJob.JobSpecification, curScheduledTimeSpec.ScheduledTime);
            }

            foreach (ScheduledTimeSpecification scheduledTimeSpecification in nextScheduledTimes)
            {
                this.AddScheduledTimeSpecification(scheduledTimeSpecification);
            }

            this.SetTimer();
        }
 public ScheduledTimeSpecificationListChangedEventArgs(ScheduledTimeSpecification scheduledJobSpecification)
 {
     this.ScheduledTimeSpecification = scheduledJobSpecification;
 }