Como: Executar procedimentos em intervalos definidos com o componente de temporizador do Windows Forms
Às vezes, você pode querer 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. A componente Timer torna esse procedimento possível.
Este componente foi projetado para um ambiente Windows Forms. Se precisar de um temporizador adequado para um ambiente de servidor, consulte Introdução aos temporizadores Server-Based.
Observação
Existem algumas limitações ao usar o componente Timer. Para obter mais informações, consulte Limitações da propriedade Interval do componente de Timer do Windows Forms.
Para executar um procedimento em intervalos definidos com o componente Timer
Adicione um Timer ao seu formulário. Consulte a seção Exemplo a seguir para obter uma ilustração de como fazer isso programaticamente. Visual Studio também tem suporte para adicionar componentes a um formulário. Consulte também Como: Adicionar controles sem uma interface de usuário ao Windows Forms.
Defina a propriedade Interval (em milissegundos) para o temporizador. Esta propriedade determina quanto tempo passará antes que o procedimento seja executado novamente.
Observação
Quanto mais frequentemente ocorrer um evento de temporizador, mais tempo do processador será usado para responder ao evento. Isso pode diminuir o desempenho geral. Não defina um intervalo menor do que o necessário.
Escreva o código apropriado no manipulador de eventos Tick. O código que você escrever neste evento será executado no intervalo especificado na propriedade Interval.
Defina a propriedade Enabled como
true
para iniciar o temporizador. O evento Tick começará a ocorrer, executando seu procedimento no intervalo definido.No momento apropriado, defina a propriedade Enabled como
false
para impedir que o procedimento seja executado novamente. Definir o intervalo como0
não faz com que o temporizador pare.
Primeiro exemplo de código
Este primeiro exemplo de código regista a hora do dia em intervalos de um segundo. Usa um Button, um Labele um componente Timer num formulário. A propriedade Interval é definida como 1000 (igual a um segundo). No evento Tick, a legenda do rótulo é ajustada para a hora atual. Quando o botão é clicado, a propriedade Enabled é definida como false
, impedindo que o temporizador atualize a legenda do rótulo. O exemplo de código a seguir requer que você tenha um formulário com um controle Button chamado Button1
, um controle Timer chamado Timer1
e um controle Label chamado Label1
.
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 Button chamado Button1
, um controle Timer chamado Timer1
e um controle Label chamado Label1
.
' 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());
}
}
Ver também
- Timer
- Componente do temporizador
- Visão geral do componente temporizador
.NET Desktop feedback