#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 перезапускается. Вам не нужно останавливать и запускать таймер каждый раз, когда вы обрабатываете прошедшее событие, если ваша обработка завершена до наступления следующего интервала.