Недавно я столкнулся с проблемой написания службы Windows. Мне нужно было периодически запрашивать URL-адрес и проверять его доступность. Для этого я решил инициализировать таймер в методе службы OnStart
, а всю работу выполнить в событии timer_Tick
.
Мой первый подход заключался в использовании System.Windows.Forms.Timer
и его события Tick
. Я выбрал это из-за учебника, который я читал. Как-то не удавалось заставить сервис работать. Он установился и запустился без проблем, но не запускал событие (я подключил отладчик к процессу и увидел, что он не запускается). Я подумал, что, возможно, использование таймера Forms в службе Windows - не лучшая идея, поэтому я решил переключиться на System.Timers.Timer
и использовать его событие Elapsed
. Это тоже не сработало. Я пробовал оба упомянутых подхода в приложении Windows Forms, и оба они работали.
Покопавшись, я нашел этот сайт: http://weblogs.asp.net/sibrahim/archive/2004/01/13/58429.aspx , на котором блоггер советует использовать еще один таймер: System.Threading.Timer
. Я изменил подход в третий раз, и БУМ он начал работать как шарм.
У меня вопрос: почему я не могу использовать другие таймеры в службах Windows и почему так сложно найти информацию об этом?