? Recientemente me han desafiado a escribir un servicio de Windows. Necesitaba solicitar periódicamente una URL y verificar su disponibilidad. Para esto, decidí inicializar un temporizador en el método OnStart
del servicio y hacer todo el trabajo en el evento timer_Tick
.¿Por qué el servicio de Windows no funciona correctamente con System.Timers.Timer o System.Windows.Forms.Timer
Mi primer enfoque fue usar System.Windows.Forms.Timer
y su evento Tick
. Lo elegí por el tutorial que estaba leyendo. De alguna manera no pude hacer que el servicio funcione. Se instaló e inició sin problemas, pero no desencadenó el evento (adjunté el depurador al proceso y vi que no se había activado). Pensé que quizás usar el temporizador Forms en el servicio de Windows no es una buena idea, así que decidí cambiar a System.Timers.Timer
y utilizar su evento Elapsed
. Esto no funcionó bien. Probé ambos enfoques mencionados en una aplicación de Windows Forms y ambos funcionaron.
Después de excavar, encontré este sitio: http://weblogs.asp.net/sibrahim/archive/2004/01/13/58429.aspx en el que el blogger aconseja utilizar otro temporizador: System.Threading.Timer
. Cambié el enfoque por tercera vez y BOOM comenzó a funcionar como un amuleto.
Mi pregunta es: ¿por qué no puedo usar los otros temporizadores en servicios de Windows y por qué es tan difícil encontrar información al respecto?
Ahora encontré este artículo comparando diferentes temporizadores .NET. Definitivamente vale la pena leer: http://msdn.microsoft.com/en-us/magazine/cc164015.aspx –
El 'System.Threading.Timer' es el único que funcionó para mí en' Windows Server 2008 R2' a través de Timers. Timer funcionó en mi 'portátil con Windows 7'. – Lijo