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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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)

Timer

Weitere Ressourcen

Timer-Komponente (Windows Forms)