예제 #1
0
 private void Work(StopClass stopped)
 {
     while (!stopped.Value)
     {
         var now = DateTime.Now;
         foreach (var plan in Plan)
         {
             try
             {
                 lock (plan.Lock)
                 {
                     if (plan.NextTime <= now && plan.Executed == false)
                     {
                         plan.Executed = true;
                         var startInfo = new ProcessStartInfo(Section.ExecutorPath, plan.Job.JobId);
                         startInfo.CreateNoWindow   = true;
                         startInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
                         startInfo.UseShellExecute  = true;
                         var process = Process.Start(startInfo);
                         plan.LastRunTime = DateTime.Now;
                     }
                 }
             }
             catch (Exception ex)
             {
                 Trace.WriteLine($"Time:{DateTime.Now};{ex}");
             }
         }
         //Waitor.SpinOnce();
         Thread.Sleep(1);
     }
 }
예제 #2
0
        private void RefreshPlan(StopClass stopped)
        {
            while (!stopped.Value)
            {
                var now = DateTime.Now;
                foreach (var item in Plan)
                {
                    lock (item.Lock)
                    {
                        if (item.Executed)
                        {
                            var cron = CrontabSchedule.Parse(item.Job.Cron, new CrontabSchedule.ParseOptions()
                            {
                                IncludingSeconds = true
                            });
                            var nextTime = cron.GetNextOccurrence(now);
                            if (nextTime - item.LastRunTime >= TimeSpan.FromSeconds(1)) //avoid the status being refreshed immediately as the Plan is quickly executed.
                            {
                                item.NextTime = nextTime;
                                item.Executed = false;
                            }
                        }
                    }
                }

                //Waitor.SpinOnce();
                Thread.Sleep(1);
            }
        }