Почему служба Windows не работает должным образом с System.Timers .Timer или System.Windows.Forms.Таймер

Недавно я столкнулся с проблемой написания службы 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 и почему так сложно найти информацию об этом?

7
задан Michal B. 9 February 2012 в 09:39
поделиться