2016-09-28 4 views
-1

Как создать функцию автоматического закрытия программы в 06:00, независимо от того, закончили ли она свою работу или нет?Закройте консольное приложение в определенное время в .Net 3.5

static void Main(string[] args) 
{ 
    //How to create a function to check the time and kill the programe 
    foreach(var job in toDayjobs) 
    {   
     runJob(); 
    } 
} 
+0

http://stackoverflow.com/questions/4529019/how-to-use-the-net-timer-class-to-trigger-an-event-at- a-specific-time –

+2

Вам нужен планировщик. Напишите чек с помощью таймера самостоятельно или используйте сторонний планировщик, такой как Quartz.net. –

+0

Как насчет планировщика окон? –

ответ

1

Это код, чтобы сделать это если вы хотите, чтобы закрыть приложение @ 6: 00 PM

private static bool isCompleted = false; 
static void Main(string[] args) 
     { 
     var hour = 16; 
     var date = DateTime.Now; 

     if (DateTime.Now.Hour > hour) 
      date = DateTime.Now.AddDays(1); 

     var day = date.Day; 

     var timeToShutdown = new DateTime(date.Year, date.Month, day, 18, 0, 0).Subtract(DateTime.Now); 

     var timer = new System.Timers.Timer(); 
     timer.Elapsed += Timer_Elapsed; 
     timer.Interval = timeToShutdown.TotalMilliseconds; 
     timer.Start(); 

//Do the forloop here 
isCompleted= true; 

      Console.WriteLine("Press any key to continue"); 
      Console.Read(); 
     } 

     private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
     { 
      var timer = (sender as System.Timers.Timer); 
      timer.Stop(); 
      timer.Dispose(); 

      if(isCompleted == false) 
       throw new Exception("Work was not completed"); 
      Environment.Exit(0); 
     } 
+0

будет хорошо работать с .Net-версией 3.5? –

+0

Могу ли я предложить другой расчет для конечного времени, заканчивающийся в 6:00? 'var endTime = DateTime.Now.Hour <6? DateTime.Today.AddHours (6): DateTime.Today.AddDays (1) .AddHours (6); 'Это обрабатывает оба случая, если текущее время до 6:00, а текущее время - через 6:00 - конец следующего день. – grek40

+0

@ grek40, если сейчас 2:00 AM, тогда ваш код приведет к 8:00 утра не в 6:00 утра, если время было 8:00, то это будет второй день в 2:00 вечера, что неправильно в обоих случаях –

2

Этот фрагмент кода должен работать. Не забудьте добавить using System.Threading;

static void Main(string[] args) 
    { 
     CloseAt(new TimeSpan(6, 0, 0)); //6 AM 

     //Your foreach code here 

     Console.WriteLine("Waiting"); 
     Console.ReadLine(); 
    } 

    public static void CloseAt(TimeSpan activationTime) 
    { 
     Thread stopThread = new Thread(delegate() 
     { 
      TimeSpan day = new TimeSpan(24, 00, 00); // 24 hours in a day. 
      TimeSpan now = TimeSpan.Parse(DateTime.Now.ToString("HH:mm"));  // The current time in 24 hour format 
      TimeSpan timeLeftUntilFirstRun = ((day - now) + activationTime); 
      if (timeLeftUntilFirstRun.TotalHours > 24) 
       timeLeftUntilFirstRun -= new TimeSpan(24, 0, 0); 
      Thread.Sleep((int)timeLeftUntilFirstRun.TotalMilliseconds); 
      Environment.Exit(0); 
     }) 
     { IsBackground = true }; 
     stopThread.Start(); 
    } 
+0

Где я должен поместить код foreach? над Console.WriteLine («Ожидание») ;? –

+0

Сначала вызовите метод CloseAt(), а затем сделайте свой код foreach –

+0

, почему он не остановился ... когда я его тестирую. i установить CloseAt (новый TimeSpan (18, 57, 0)); –

Смежные вопросы