Gewusst wie: Ausführen von Prozeduren in festgelegten Abständen mit der Timer-Komponente in Windows Forms
Aktualisiert: November 2007
Gelegentlich kann es erforderlich sein, eine Prozedur zu erstellen, die nach Ablauf eines festgelegten Zeitintervalls oder in bestimmten Zeitabständen bis zum Ende einer Schleife ausgeführt wird. Die Timer-Komponente ermöglicht eine solche Prozedur.
Diese Komponente ist für eine Windows Forms-Umgebung gedacht. Wenn Sie einen Zeitgeber benötigen, der für eine Serverumgebung geeignet ist, informieren Sie sich unter Einführung in serverbasierte Zeitgeber.
Hinweis: |
---|
Die Verwendung der Timer-Komponente unterliegt einigen Einschränkungen. Weitere Informationen hierzu finden Sie unter Einschränkungen für die Interval-Eigenschaft der Timer-Komponente in Windows Forms. |
So führen Sie eine Prozedur mit der Timer-Komponente in bestimmten Zeitintervallen aus
Fügen Sie dem Formular einen Timer hinzu. Im folgenden Beispielabschnitt finden Sie eine Abbildung zum programmgesteuerten Hinzufügen einer Komponente. Visual Studio unterstützt ebenfalls das Hinzufügen von Komponenten zu einem Formular. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen von Steuerelementen ohne Benutzeroberfläche zu Windows Forms und Gewusst wie: Hinzufügen von Steuerelementen ohne Benutzeroberfläche zu Windows Forms und Gewusst wie: Hinzufügen von Steuerelementen ohne Benutzeroberfläche zu Windows Forms und Gewusst wie: Hinzufügen von Steuerelementen ohne Benutzeroberfläche zu Windows Forms.
Stellen Sie die Interval-Eigenschaft (in Millisekunden) für den Zeitgeber ein. Diese Eigenschaft bestimmt, mit welchem Zeitabstand die Prozedur erneut ausgeführt werden soll.
Hinweis: Je öfter ein Zeitgeberereignis auftritt, desto mehr Prozessorzeit wird für die Reaktion auf das Ereignis aufgewendet. Dies kann die Gesamtleistung verringern. Stellen Sie kein kleineres Intervall als erforderlich ein.
Schreiben Sie den entsprechenden Code in den Tick-Ereignishandler. Der in dieses Ereignis geschriebene Code wird in den Abständen ausgeführt, die in der Interval-Eigenschaft angegeben sind.
Legen Sie die Enabled-Eigenschaft auf true fest, um den Zeitgeber zu starten. Das Tick-Ereignis tritt nun ein und führt die Prozedur in den eingestellten Zeitabständen aus.
Legen Sie die Enabled-Eigenschaft zu gegebener Zeit wieder auf false fest, um die weitere Ausführung der Prozedur zu verhindern. Durch das Festlegen des Intervalls auf 0 wird der Zeitgeber nicht angehalten.
Beispiel
In diesem ersten Codebeispiel wird die Tageszeit in Schritten von jeweils einer Sekunde erfasst. Darin wird eine Komponente vom Typ Button, Label und Timer auf einem Formular verwendet. Die Interval-Eigenschaft ist auf 1000 (entspricht einer Sekunde) gesetzt. Im Tick-Ereignis ist als Beschriftung der Label-Komponente die aktuelle Zeit festgelegt. Beim Klicken auf die Schaltfläche wird die Enabled-Eigenschaft auf false gesetzt, und der Zeitgeber hört auf, die Beschriftung der Label-Komponente zu aktualisieren. Das folgende Codebeispiel setzt voraus, dass Sie über ein Formular mit einem Button-Steuerelement mit dem Namen Button1, ein Timer-Steuerelement mit dem Namen Timer1 und ein Label-Steuerelement mit dem Namen Label1 verfügen.
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()
{
//' Run this procedure in an appropriate event.
// Set to 1 second.
Timer1.Interval = 1000;
// Enable timer.
Timer1.Enabled = true;
Button1.Text = "Stop";
}
private void Timer1_Tick(object Sender, EventArgs e)
{
// Set the caption to the current time.
Label1.Text = DateTime.Now.ToString();
}
private void Button1_Click()
{
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.set_Interval(1000);
// Enable timer.
Timer1.set_Enabled(true);
Button1.set_Text("Stop");
}
private void Timer1_Tick(System.Object Sender, EventArgs e)
{
// Set the caption to the current time.
Label1.set_Text(DateTime.get_Now().ToString());
}
private void Button1_Click()
{
if ( Button1.get_Text() == "Stop" )
{
Button1.set_Text("Start");
Timer1.set_Enabled(false);
}
else
{
Button1.set_Text("Stop");
Timer1.set_Enabled(true);
}
}
private:
void InitializeTimer()
{
// Run this procedure in an appropriate event.
// Set to 1 second.
timer1->Interval = 1000;
// Enable timer.
timer1->Enabled = true;
button1->Text = S"Stop";
}
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;
}
}
In diesem zweiten Codebeispiel wird eine Prozedur alle 600 Millisekunden bis zum Ende einer Schleife ausgeführt. Das folgende Codebeispiel setzt voraus, dass Sie über ein Formular mit einem Button-Steuerelement mit dem Namen Button1, ein Timer-Steuerelement mit dem Namen Timer1 und ein Label-Steuerelement mit dem Namen Label1 verfügen.
' 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();
}
}
// Run this procedure in an appropriate event.
counter = 0;
timer1.set_Interval(600);
timer1.set_Enabled(true);
// Wire up timer's tick event handler.
this.timer1.add_Tick(new System.EventHandler(this.timer1_Tick));
private void timer1_Tick(System.Object sender, System.EventArgs e)
{
if ( counter >= 10 )
{
// Exit loop code.
timer1.set_Enabled(false);
counter = 0;
}
else
{
// Run your procedure here.
// Increment counter.
counter = counter + 1;
this.timer1.add_Tick(new System.EventHandler(this.timer1_Tick));
}
}
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());
}
}
Siehe auch
Referenz
Übersicht über die Timer-Komponente (Windows Forms)