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


Bookmark and Share

5 Comments

  1. Marcus says:

    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!

  2. Antonio Adriano R. de Souza says:

    Valeu pela dia, depois de muita porcaria uma dica realmente funcional.

  3. Diego Silva says:

    Muito Bom o Post… me ajudou bastante…

  4. Rodrigo says:

    Parabéns, parece um negócio simples … mas me ajudou pacas … vlw

  5. Fábio Ruggiero says:

    Me ajudou muito. Obrigado!

Leave a Reply