Usando Timer em uma aplicação Windows Services.
Pessoal,
Hoje me perguntaram sobre a utilização do objeto Timer em uma aplicação Windows Services, questionando que ao adicionar o objeto direto da Toolbox ele não estava sendo executado no seu respectivo intervalo.
Bom Primeiro vamos esclarecer duas coisas para quem ainda não conhece. O que é Windows Services e o Objeto Timer?
- Windows Services: Aplicação windows que fica sendo executada em background no S.O.
- Objeto Timer: Objeto disponivel na plataforma .NET para executarmos funcionalidades em um determinado espaço de tempo.
Agora como faço para usar o Timer em um Windows Services? eu recomendo que seja feito de maneira dinâmica ao invés incluir o objeto via toolbox… Apenas por gosto
Para que o timer funcione de acordo com o proposto temos que adicionar ao nosso objeto Timer, um EventHandler(ElapsedEventHandler) ele executará as funcionalidades codificadas respeitando o intervalo informado ao objeto. Vamos ao exemplo:
Para iniciar, no seu projeto Windows Services, importe a referência das classe Timers:
using System.Timers;
Agora em sua classe Inicialize o objeto Timer, isso se você estiver fazendo de forma dinâmica,se você escolheu adicionar o objeto direto do toolbox pule este passo.
namespace WindowsService3 { public partial class TimeSrv : ServiceBase { //Inicializando o objeto timer Timer timer = new Timer();
Como estamos falando de Windows Service, agora em nosso evento de inicialização do serviço (OnStart), o qual é executado sempre que o serviço é iniciado vamos habilitar o timer e definir um timer para sua execução.
protected override void OnStart(string[] args) { //Escreve no Visualizador de Evento do Windows EventLog.WriteEntry(“Serviço Inicializado.”, EventLogEntryType.Information); //1: Adicionando o evento Elapsed ao objeto Timer timer.Elapsed += new ElapsedEventHandler(OnElapsedTime); //2: Marcando o como intervalo 1 minuto (= 60,000 milliseconds) timer.Interval = 60000; //3: Habilitando o objeto timer para execução. timer.Enabled = true; }
Sendo que definimos um evento Elapsed ao objeto timer chamado OnElapsedTime, temos que ter o método criado, nele teremos o código que será executado assim que o timer for habilitado, claro tudo isso dentro do intervalo definido acima. Em nosso exemplo eu apenas escrevo a data no Visualizador de Eventos do Windows, mas lembrando que o código ali executado fica a critério do desenvolvedor.
private void OnElapsedTime(object source, ElapsedEventArgs e) { EventLog.WriteEntry(“Executando serviço: ” + DateTime.Now.ToShortTimeString(),EventLogEntryType.Information); }
Agora para fecharmos mais esta dica basta usar o evento OnStop do seu serviço, evento que é executado quando seu Windows Services é parado, para desabilitar o timer.
protected override void OnStop() { timer.Enabled = false; EventLog.WriteEntry(“Serviço Parado.”,EventLogEntryType.Information); }
Bom espero ter resolvido a dúvida do pessoal da comunidade que estava me perguntando e claro passado mais uma dica a todos.
[]’s
Adriano Bertucci, Microsoft MVP especialista em Aquitetura de Software e ALM. Palestrante contribui para comunidade técnica através de artigos, palestras e redes sociais.
Corinthiano adora assistir o seu timão no Pacaembu nos finais de semana.

Cara muito obrigado!! vc sanou um grande problema meu, a
alguns dias eu venho tentando fazer exatamente isso, e realmente
nao estava funcionando com o componente timer arrastado da tool
box! obrigado! grande abraço!
Valeu pela dia, depois de muita porcaria uma dica realmente funcional.
Muito Bom o Post… me ajudou bastante…
Parabéns, parece um negócio simples … mas me ajudou pacas … vlw
Me ajudou muito. Obrigado!