O evento de Windows Forms Timer não é aumentado em um serviço do Windows

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 820639
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Você adiciona um componente de timer do Microsoft Windows Forms ao seu serviço do Windows. Ative o timer e, em seguida, você definir o intervalo para o timer elevar um evento. Instalar o serviço do Windows no computador e, em seguida, você inicia o serviço. O evento Timer no serviço do Windows não é disparado.

Observação O componente de timer do Windows Forms está localizado no namespace System.Windows.Forms .
Causa
O componente de timer do Windows Forms é projetado para um Windows Forms ambiente. O componente de timer do Windows Forms não é projetado para um ambiente de servidor. Portanto, o timer não pode disparar eventos se você usá-lo em um serviço do Windows.
Resolução
Para resolver esse problema, use timers de servidor do namespace System.Timers em vez de timers de Windows Forms do namespace System.Windows.Forms . Para fazer isso, execute as seguintes etapas:
  1. Execute o seguinte comando na janela de comando para remover a classe Service1 :
    InstallUtil /u WindowsService1.exe
    Observação WindowsService1.exe está localizado na pasta bin na pasta do projeto. Adicione o caminho do seu WindowsService1.exe.
  2. Alterne para o projeto Windows Service.
  3. Na janela de Designer Service1 , clique no controle Timer1 .
  4. Pressione a tecla DELETE para remover Timer1 controle da janela Designer.
  5. Na barra de ferramentas, clique no componentes guia.
  6. Na barra de ferramentas, arraste um controle Timer para a janela Designer.
  7. Clique duas vezes no controle Timer1 na janela do Designer para exibir a janela código.
  8. Mova o código no manipulador de eventos Tick do controle Timer1 para o manipulador de eventos decorrido do controle Timer1 .
  9. Remova manipulador de eventos Tick .
  10. No menu Build , clique em Build Solution .
  11. Execute o seguinte comando na janela de comando:
    InstallUtil WindowsService1.exe
  12. No menu Ferramentas administrativas , clique em serviços .
  13. Clique com o botão direito do mouse Service1 e, em seguida, clique em Iniciar .
  14. Aguarde alguns segundos, clique com o botão direito do mouse Service1 e em seguida, clique em Parar .
  15. Abra o arquivo C:\sample.txt e, em seguida, observe o texto.

    O texto de escala é exibido com Iniciar e Parar .
Situação
Esse comportamento é por design.
Mais Informações

Passos para reproduzir o problema

  1. Inicie o Microsoft Visual Studio NET..
  2. Abra um novo projeto Windows Service usando o Microsoft Visual Basic .NET ou Microsoft Visual translation from VPE for Csharp .NET.

    Por padrão, Service1 é criado.
  3. Na caixa de ferramentas, clique em Windows Forms guia.
  4. Arraste um controle Timer da caixa de ferramentas para a janela de Designer Service1 .
  5. Na janela Designer, clique duas vezes no controle Timer1 .

    A janela de código Service1 é exibida.
  6. Se você estiver usando Visual translation from VPE for Csharp. NET, adicione a instrução a seguir ao início do código:
    using System.IO;
  7. Adicione o seguinte código para OnStart procedimento da classe Service1 .

    código do Visual Basic .NET
    'Set the interval of the timer to 3 seconds.Timer1.Interval = 3000Timer1.Enabled = True'Open the sample.txt file in append mode.FileOpen(1, "C:\sample.txt", OpenMode.Append)'Print text to the "C:/sample.txt file.Print(1, "Start")FileClose()
    Visual translation from VPE for Csharp .NET Code
    //Set the interval of timer to 3 seconds.timer1.Interval =3000;//Enable the timer.timer1.Enabled =true;//Append the text to the sample file.StreamWriter writer =File.AppendText(@"C:\sample.txt");writer.WriteLine("Start");           writer.Close();
  8. Adicione o seguinte código para OnStop procedimento da classe Service1 .

    código do Visual Basic .NET
    'Open the C:\sample.txt file in append mode.FileOpen(1, "C:\sample.txt", OpenMode.Append)'Print the text 'Stop' to the C:\sample.txt file.Print(1, "Stop")FileClose()
    Visual translation from VPE for Csharp .NET Code
    //Append the text Stop to the C:\sample.txt file.StreamWriter writer =File.AppendText(@"C:\sample.txt");writer.WriteLine("Stop");writer.Close();
  9. Adicione o seguinte código para o evento Tick do componente Timer1 .

    código do Visual Basic .NET
     'Set the enabled property to false.Timer1.Enabled = False'Open the C:\sample.txt file in append mode.FileOpen(1, "C:\sample.txt", OpenMode.Append)'Print the text 'Tick' to the C:\sample.txt file.Print(1, "Tick")FileClose()'Enable the timer.Timer1.Enabled = True
    Visual translation from VPE for Csharp .NET Code
    //Set the enable property to false.timer1.Enabled =false;//Append the text Tick to the C:\sample.txt file.StreamWriter writer =File.AppendText(@"C:\sample.txt");writer.WriteLine("Tick");writer.Close();timer1.Enabled =true;
  10. No menu Exibir , clique em Designer .
  11. Clique com o botão direito do mouse no Designer e clique em Add Installer .

    Por padrão, ServiceInstaller1 e ServiceProcessInstaller1 são criados.
  12. Clique com o botão direito do mouse em ServiceInstaller1 e, em seguida, clique em Propriedades .
  13. Defina a propriedade DisplayName para Service1 .

    Observação É uma boa idéia para definir a propriedade ServiceName como Service1 .
  14. Clique com o botão direito do mouse em ServiceProcessInstaller1 e, em seguida, clique em Propriedades .
  15. Propriedades ServiceProcessInstaller1 da janela, defina a propriedade conta como LocalSystem .
  16. No menu Build , clique em Build Solution .
  17. Clique em Iniciar e, em seguida, clique em Executar .
  18. Na janela Executar, digite cmd na caixa Abrir e, em seguida, pressione a tecla ENTER.
  19. No prompt de comando, execute o seguinte comando:
    installutil  WindowsService1.exe
    Observação O serviço Service1 não está instalado se você estiver usando qualquer outro serviço com o mesmo nome.
  20. Depois que a instalação for concluída, clique em Ferramentas administrativas no painel de controle e em seguida, clique em serviços .
  21. Na janela Serviços, clique com o botão direito do mouse Service1 e, em seguida, clique em Iniciar .
  22. Aguarde alguns segundos, clique com o botão direito do mouse Service1 e em seguida, clique em Parar .
  23. Abra o arquivo C:\sample.txt.

    O texto StartStop é exibido. O evento Tick Timer1 não será levantado e o texto de escala não é impresso para o arquivo C:\sample.txt.
Referências
Para obter mais informações sobre aplicativos de serviço do Windows, visite o seguinte site da Web Microsoft Developer Network (MSDN):

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 820639 - Última Revisão: 12/08/2015 02:42:42 - Revisão: 1.3

Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbvs2005doesnotapply kbvs2005swept kbserviceprocess kbctrl kbcontrol kbevent kbtimer kbwindowsforms kbservice kbprb KB820639 KbMtpt
Comentários