Freigeben über


Vorgehensweise: Ausführen von Prozeduren in festgelegten Intervallen mit der Komponente "Windows Forms Timer"

Möglicherweise möchten Sie manchmal eine Prozedur erstellen, die in bestimmten Zeitintervallen ausgeführt wird, bis eine Schleife abgeschlossen ist oder die ausgeführt wird, wenn ein festgelegtes Zeitintervall verstrichen ist. Die Timer Komponente ermöglicht eine solche Prozedur.

Diese Komponente wurde für eine Windows Forms-Umgebung entwickelt. Wenn Sie einen für eine Serverumgebung geeigneten Timer benötigen, lesen Sie die Informationen unter Einführung in serverbasierte Timer.

Hinweis

Es gibt einige Einschränkungen bei der Verwendung der Timer Komponente. Weitere Informationen finden Sie unter Einschränkungen der Intervalleigenschaft der Windows Forms-Zeitgeberkomponente.

So führen Sie eine Prozedur in festgelegten Intervallen mit der Timer-Komponente aus

  1. Fügen Sie Ihrem Formular ein Timer hinzu. Im folgenden Beispielabschnitt finden Sie eine Abbildung zur programmgesteuerten Vorgehensweise. Visual Studio unterstützt außerdem das Hinzufügen von Komponenten zu einem Formular. Siehe auch Vorgehensweise: Hinzufügen von Steuerelementen ohne Benutzeroberfläche zu Windows Forms.

  2. Legen Sie die Interval Eigenschaft (in Millisekunden) für den Timer fest. Diese Eigenschaft bestimmt, wie viel Zeit vergeht, bevor die Prozedur erneut ausgeführt wird.

    Hinweis

    Je häufiger ein Timerereignis auftritt, desto mehr Prozessorzeit wird verwendet, um auf das Ereignis zu reagieren. Dies kann die Gesamtleistung verlangsamen. Legen Sie kein kleineres Intervall fest, als Sie benötigen.

  3. Schreiben Sie den entsprechenden Code im Tick Ereignishandler. Der code, den Sie in dieses Ereignis schreiben, wird in dem in der Interval Eigenschaft angegebenen Intervall ausgeführt.

  4. Setzen Sie die Enabled Eigenschaft auf true, um den Timer zu starten. Das Tick Ereignis wird beginnen und Ihre Prozedur im festgelegten Intervall ausführen.

  5. Setzen Sie zu einem geeigneten Zeitpunkt die Enabled-Eigenschaft auf false, um zu verhindern, dass die Prozedur erneut ausgeführt wird. Wenn das Intervall auf 0 gesetzt wird, führt das nicht dazu, dass der Timer stoppt.

Erstes Codebeispiel

In diesem ersten Codebeispiel wird die Tageszeit in 1-Sekunden-Schritten nachverfolgt. Es verwendet eine Button, eine Labelund eine Timer Komponente auf einem Formular. Die Interval Eigenschaft wird auf 1000 (gleich einer Sekunde) festgelegt. Im Tick-Ereignis wird die Beschriftung auf die aktuelle Uhrzeit festgelegt. Wenn auf die Schaltfläche geklickt wird, wird die Enabled-Eigenschaft auf false festgelegt, was den Timer daran hindert, die Beschriftung zu aktualisieren. Das folgende Codebeispiel erfordert, dass Sie über ein Formular mit einem Button Steuerelement mit dem Namen Button1, einem Timer Steuerelement mit dem Namen Timer1und einem Label Steuerelement mit dem Namen verfügen 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;
      }
   }

Zweites Codebeispiel

In diesem zweiten Codebeispiel wird eine Prozedur alle 600 Millisekunden ausgeführt, bis eine Schleife abgeschlossen ist. Das folgende Codebeispiel erfordert, dass Sie über ein Formular mit einem Button Steuerelement mit dem Namen Button1, einem Timer Steuerelement mit dem Namen Timer1und einem Label Steuerelement mit dem Namen verfügen 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());
      }
   }

Siehe auch