Compartilhar via


Como executar procedimentos em intervalos definidos com o componente temporizador do Windows Forms

Às vezes, talvez você queira criar um procedimento que seja executado em intervalos de tempo específicos até que um loop seja concluído ou que seja executado quando um intervalo de tempo definido tiver decorrido. O Timer componente possibilita esse procedimento.

Esse componente foi projetado para um ambiente do Windows Forms. Se você precisar de um temporizador adequado para um ambiente de servidor, consulte Introdução a Server-Based Timers.

Observação

Há algumas limitações ao usar o Timer componente. Para obter mais informações, consulte Limitações da propriedade Interval do Componente Timer do Windows Forms.

Para executar um procedimento em intervalos definidos com o componente Timer

  1. Adicione um Timer ao formulário. Consulte a seção Exemplo a seguir para obter uma ilustração de como fazer isso programaticamente. O Visual Studio também tem suporte para adicionar componentes a um formulário. Veja também como adicionar controles sem uma interface do usuário ao Windows Forms.

  2. Defina a Interval propriedade (em milissegundos) para o temporizador. Essa propriedade determina quanto tempo passará antes que o procedimento seja executado novamente.

    Observação

    Quanto mais frequentemente ocorrer um evento de temporizador, mais tempo de processador é usado na resposta ao evento. Isso pode diminuir o desempenho geral. Não defina um intervalo menor do que o necessário.

  3. Escreva o código apropriado no Tick manipulador de eventos. O código que você escreve nesse evento será executado no intervalo especificado na Interval propriedade.

  4. Defina a Enabled propriedade para true iniciar o temporizador. O evento Tick começará a acontecer, realizando o procedimento no intervalo definido.

  5. No momento apropriado, defina a propriedade Enabled como false para impedir que o procedimento seja executado novamente. Definir o intervalo 0 não faz com que o temporizador pare.

Primeiro exemplo de código

Este primeiro exemplo de código rastreia a hora do dia em incrementos de um segundo. Ele usa um Button, um Label e um componente Timer em um formulário. A Interval propriedade é definida como 1000 (igual a um segundo). No evento Tick, a legenda é definida como a hora atual. Quando o botão é clicado, a Enabled propriedade é definida como false, impedindo o temporizador de atualizar a legenda do rótulo. O exemplo de código a seguir requer que você tenha um formulário com um controle chamado Button, um controle Button1 chamado Timer e um controle Timer1 chamado Label.

Private Sub InitializeTimer()
   ' Run this procedure in an appropriate event.
   ' Set to 1 second.
   Timer1.Interval = 1000
   ' Enable timer.
   Timer1.Enabled = True
   Button1.Text = "Enabled"
End Sub
x
Private Sub Timer1_Tick(ByVal Sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
' Set the caption to the current time.
   Label1.Text = DateTime.Now
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      If Button1.Text = "Stop" Then
         Button1.Text = "Start"
         Timer1.Enabled = False
      Else
         Button1.Text = "Stop"
         Timer1.Enabled = True
      End If
End Sub
private void InitializeTimer()
{
    // Call this procedure when the application starts.
    // Set to 1 second.
    Timer1.Interval = 1000;
    Timer1.Tick += new EventHandler(Timer1_Tick);

    // Enable timer.
    Timer1.Enabled = true;

    Button1.Text = "Stop";
    Button1.Click += new EventHandler(Button1_Click);
}

private void Timer1_Tick(object Sender, EventArgs e)
{
   // Set the caption to the current time.
   Label1.Text = DateTime.Now.ToString();
}

private void Button1_Click(object sender, EventArgs e)
{
  if ( Button1.Text == "Stop" )
  {
    Button1.Text = "Start";
    Timer1.Enabled = false;
  }
  else
  {
    Button1.Text = "Stop";
    Timer1.Enabled = true;
  }
}
private:
   void InitializeTimer()
   {
      // Run this procedure in an appropriate event.
      // Set to 1 second.
      timer1->Interval = 1000;
      // Enable timer.
      timer1->Enabled = true;
      this->timer1->Tick += gcnew System::EventHandler(this,
                               &Form1::timer1_Tick);

      button1->Text = S"Stop";
      this->button1->Click += gcnew System::EventHandler(this,
                               &Form1::button1_Click);
   }

   void timer1_Tick(System::Object ^ sender,
      System::EventArgs ^ e)
   {
      // Set the caption to the current time.
      label1->Text = DateTime::Now.ToString();
   }

   void button1_Click(System::Object ^ sender,
      System::EventArgs ^ e)
   {
      if ( button1->Text == "Stop" )
      {
         button1->Text = "Start";
         timer1->Enabled = false;
      }
      else
      {
         button1->Text = "Stop";
         timer1->Enabled = true;
      }
   }

Segundo exemplo de código

Este segundo exemplo de código executa um procedimento a cada 600 milissegundos até que um loop seja concluído. O exemplo de código a seguir requer que você tenha um formulário com um controle chamado Button, um controle Button1 chamado Timer e um controle Timer1 chamado Label.

' This variable will be the loop counter.
Private counter As Integer

Private Sub InitializeTimer()
   ' Run this procedure in an appropriate event.
   counter = 0
   Timer1.Interval = 600
   Timer1.Enabled = True
End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
   If counter => 10 Then
      ' Exit loop code.
      Timer1.Enabled = False
      counter = 0
   Else
      ' Run your procedure here.
      ' Increment counter.
      counter = counter + 1
      Label1.Text = "Procedures Run: " & counter.ToString
   End If
End Sub
// This variable will be the loop counter.
private int counter;

private void InitializeTimer()
{
   // Run this procedure in an appropriate event.
   counter = 0;
   timer1.Interval = 600;
   timer1.Enabled = true;
   // Hook up timer's tick event handler.
   this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
}

private void timer1_Tick(object sender, System.EventArgs e)
{
   if (counter >= 10)
   {
      // Exit loop code.
      timer1.Enabled = false;
      counter = 0;
   }
   else
   {
      // Run your procedure here.
      // Increment counter.
      counter = counter + 1;
      label1.Text = "Procedures Run: " + counter.ToString();
      }
}
private:
   int counter;

   void InitializeTimer()
   {
      // Run this procedure in an appropriate event.
      counter = 0;
      timer1->Interval = 600;
      timer1->Enabled = true;
      // Hook up timer's tick event handler.
      this->timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick);
   }

   void timer1_Tick(System::Object ^ sender,
      System::EventArgs ^ e)
   {
      if (counter >= 10)
      {
         // Exit loop code.
         timer1->Enabled = false;
         counter = 0;
      }
      else
      {
         // Run your procedure here.
         // Increment counter.
         counter = counter + 1;
         label1->Text = String::Concat("Procedures Run: ",
            counter.ToString());
      }
   }

Consulte também