Sono stato recentemente sfidato a scrivere un servizio di Windows. Avevo bisogno di richiedere periodicamente un URL e verificarne la disponibilità. Per questo ho deciso di inizializzare un timer nel metodo OnStart
del servizio e fare tutto il lavoro nell'evento timer_Tick
.Perché il servizio Windows non funziona correttamente con System.Timers.Timer o System.Windows.Forms.Timer
Il mio primo approccio era usare System.Windows.Forms.Timer
e il suo evento Tick
. Ho scelto per questo, a causa del tutorial che stavo leggendo. In qualche modo non ho potuto far funzionare il servizio. Si è installato e avviato senza problemi, ma non ha attivato l'evento (ho collegato il debugger al processo e ho visto che non è stato attivato). Ho pensato che forse usare il timer di Forms nel servizio di Windows non è una buona idea, quindi ho deciso di passare a System.Timers.Timer
e utilizzare il suo evento Elapsed
. Questo non ha funzionato neanche. Ho provato entrambi gli approcci menzionati in un'applicazione Windows Form ed entrambi hanno funzionato.
Dopo alcuni scavi, ho trovato questo sito: http://weblogs.asp.net/sibrahim/archive/2004/01/13/58429.aspx su cui il blogger consiglia di utilizzare un altro timer: System.Threading.Timer
. Ho cambiato l'approccio per la terza volta e BOOM ha iniziato a funzionare come un fascino.
La mia domanda è: perché non è possibile utilizzare gli altri timer nei servizi di Windows e perché è così difficile trovare informazioni su di esso?
Ho trovato questo articolo confrontando diversi timer .NET. Sicuramente vale la pena leggere: http://msdn.microsoft.com/en-us/magazine/cc164015.aspx –
Il 'System.Threading.Timer' è l'unico che ha funzionato per me in' Windows Server 2008 R2' anche se Timer. Il timer funzionava con il mio 'Windows 7 laptop'. – Lijo