Как настроить автоматический перезапуск приложения-службы Windows, C #?

#c# #windows-services #restart

#c# #windows-services #перезапуск

Вопрос:

Мне нужно создать некоторую службу Windows, которая будет выполняться каждые несколько раз, каждый час. Вопрос в том, какой элемент управления таймером мне следует использовать: Системный.Таймеры.Таймер или система.Многопоточность.Таймер один? Я спрашиваю, потому что я читал форум, и я получаю несколько смешанных отзывов об обоих. Кроме того, объяснения довольно сложны для понимания, поскольку я довольно новичок в программировании. Спасибо.

Комментарии:

1. Пожалуйста, обратите внимание, что на самом деле вы можете захотеть использовать запланированную задачу вместо использования службы для выполнения регулярно повторяющихся задач.

Ответ №1:

Прочитайте описание таймеров от Джона Скита:http://www.yoda.arachsys.com/csharp/threads/timers.shtml

Ответ №2:

Я использую System.Таймеры.Таймер в моих службах Windows. Им легко управлять и подключать. Intellisense от VS 2010 даже создает обработчик прошедших событий при вводе «MyTimer.Истекло = …»

Вы также можете остановить таймер в начале вашего обработчика событий и перезапустить его в конце, если вы не хотите, чтобы таймер сработал до того, как обработчик событий завершит длительную обработку. Например:

 System.Timers.Timer myTimer;
void Main()
{
    myTimer = new System.Timers.Timer(1000);
    myTimer.Elapsed  = new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
    myTimer.Start();
}

void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    myTimer.Stop();
    // process event
    myTimer.Start();
}
  

Комментарии:

1. Не могли бы вы пошагово выполнить ожидание, которое выполняет этот фрагмент кода? Я полагаю, что понимаю это, но я не совсем уверен. Говорит ли это о том, что за каждую секунду выполнения какая функция / код помещается там, где находится «/ / событие процесса»? Спасибо.

2. @Dante — MyTimer вызовет myTimer_Elapsed через секунду после MyTimer. Запустить(). Как только внутри myTimer_Elapsed MyTimer останавливается, выполняется ваш код обработки (все, что вы хотите, чтобы произошло при срабатывании таймера), а затем MyTimer перезапускается. Вам не нужно останавливать и запускать таймер каждый раз, когда вы обрабатываете прошедшее событие, если ваша обработка завершена до наступления следующего интервала.