Postupy: Spouštění procedur v nastavených intervalech pomocí komponenty Windows Forms Timer
Někdy můžete chtít vytvořit proceduru, která se spouští v určitých časových intervalech, dokud se smyčka nedokončí nebo když uplynul nastavený časový interval. Komponenta Timer umožňuje takový postup.
Tato komponenta je určená pro prostředí Windows Forms. Pokud potřebujete časovač, který je vhodný pro serverové prostředí, přečtěte si Úvod do Server-Based časovačů.
Poznámka
Při používání komponenty Timer existují určitá omezení. Další informace naleznete v tématu Omezení vlastnosti intervalu součásti Windows Forms Timer.
Spuštění procedury v nastavených intervalech pomocí komponenty Časovač
Přidejte Timer do formuláře. V následující části Příklad najdete obrázek toho, jak to udělat programově. Visual Studio také podporuje přidávání komponent do formuláře. Viz také Jak na to: Přidání ovládacích prvků bez uživatelského rozhraní ve Windows Forms.
Nastavte vlastnost Interval (v milisekundách) časovače. Tato vlastnost určuje, kolik času bude před dalším spuštěním procedury.
Poznámka
Častěji dochází k události časovače, tím více času procesoru se používá při odpovídání na událost. To může zpomalit celkový výkon. Nenastavujte menší interval, než potřebujete.
Do obslužné rutiny události Tick napište odpovídající kód. Kód, který napíšete v této události, se spustí v intervalu zadaném ve vlastnosti Interval.
Nastavte vlastnost Enabled na
true
, aby se spustil časovač. Událost Tick začne probíhat spuštěním vaší procedury v nastaveném intervalu.Ve vhodnou chvíli nastavte vlastnost Enabled na
false
, aby se procedura znovu nespustila. Nastavení intervalu na0
nezpůsobí zastavení časovače.
První příklad kódu
Tento první příklad kódu sleduje denní dobu v jednom sekundovém přírůstku. Používá Button, Labela komponentu Timer ve formuláři. Vlastnost Interval je nastavena na hodnotu 1000 (rovna jedné sekundě). V události Tick je titulek popisku nastavený na aktuální čas. Po kliknutí na tlačítko je vlastnost Enabled nastavena na false
, což zastaví časovač v aktualizaci popisku. Následující příklad kódu vyžaduje, abyste měli formulář s ovládacím prvkem Button pojmenovaným Button1
, ovládací prvek Timer pojmenovaný Timer1
a ovládací prvek Label pojmenovaný 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;
}
}
Druhý příklad kódu
Tento druhý příklad kódu spustí proceduru každých 600 milisekund, dokud není smyčka dokončena. Následující příklad kódu vyžaduje, abyste měli formulář s ovládacím prvkem Button s názvem Button1
, ovládacím prvkem Timer s názvem Timer1
a ovládacím prvkem Label s názvem 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());
}
}
Viz také
- Timer
- Komponenta časovače
- Přehled komponenty časovače
.NET Desktop feedback