Vorgehensweise: Ausführen von Prozeduren in festgelegten Abständen mit der Timer-Komponente in Windows FormsHow to: Run Procedures at Set Intervals with the Windows Forms Timer Component

In einigen Fällen möchten Sie möglicherweise eine Prozedur erstellen, die entweder in bestimmten Zeitintervallen bis zum Ende einer Schleife oder nach Ablauf eines festgelegten Zeitintervalls ausgeführt wird.You might sometimes want to create a procedure that runs at specific time intervals until a loop has finished or that runs when a set time interval has elapsed. Die Timer-Komponente ermöglicht eine solche Prozedur.The Timer component makes such a procedure possible.

Diese Komponente wurde für eine Windows Forms-Umgebung entwickelt.This component is designed for a Windows Forms environment. Wenn Sie einen für eine Serverumgebung geeigneten Timer benötigen, lesen Sie die Informationen unter Introduction to Server-Based Timers (Einführung in serverbasierte Timer).If you need a timer that is suitable for a server environment, see Introduction to Server-Based Timers.

Hinweis

Die Verwendung der Timer-Komponente unterliegt einigen Einschränkungen.There are some limitations when using the Timer component. Weitere Informationen finden Sie unter Einschränkungen der Interval-Eigenschaft der Windows Forms Timer-Komponente.For more information, see Limitations of the Windows Forms Timer Component's Interval Property.

So führen Sie eine Prozedur in festgelegten Intervallen mit der Timer-Komponente ausTo run a procedure at set intervals with the Timer component

  1. Fügen Sie Ihrem Formular einen Timer hinzu.Add a Timer to your form. Im folgenden Beispielabschnitt finden Sie eine Abbildung zur entsprechenden programmgesteuerten Vorgehensweise.See the following Example section for an illustration of how to do this programmatically. Visual Studio unterstützt auch das Hinzufügen von Komponenten zu einem Formular.Visual Studio also has support for adding components to a form. Weitere Informationen hierzu finden Sie auch unter Gewusst wie: Hinzufügen von Steuerelementen ohne Benutzeroberflächezum Windows Forms.Also see How to: Add Controls Without a User Interface to Windows Forms.

  2. Legen Sie die Interval-Eigenschaft (in Millisekunden) für den Timer fest.Set the Interval property (in milliseconds) for the timer. Diese Eigenschaft bestimmt, in welchem Zeitabstand die Prozedur erneut ausgeführt werden soll.This property determines how much time will pass before the procedure is run again.

    Hinweis

    Je öfter ein Timerereignis auftritt, desto mehr Prozessorzeit wird für die Reaktion auf das Ereignis aufgewendet.The more often a timer event occurs, the more processor time is used in responding to the event. Dadurch kann sich die Gesamtleistung verringern.This can slow down overall performance. Legen Sie kein kleineres Intervall als erforderlich fest.Do not set a smaller interval than you need.

  3. Schreiben Sie den entsprechenden Code in den Tick Ereignishandler.Write appropriate code in the Tick event handler. Der in dieses Ereignis geschriebene Code wird in dem in der Interval-Eigenschaft angegebenen Intervall ausgeführt.The code you write in this event will run at the interval specified in the Interval property.

  4. Legen Sie die Enabled-Eigenschaft auf true fest, um den Timer zu starten.Set the Enabled property to true to start the timer. Das Tick-Ereignis tritt nun ein und führt die Prozedur im festgelegten Intervall aus.The Tick event will begin to occur, running your procedure at the set interval.

  5. Legen Sie die Enabled-Eigenschaft zu gegebener Zeit auf false fest, um die weitere Ausführung der Prozedur zu verhindern.At the appropriate time, set the Enabled property to false to stop the procedure from running again. Das Festlegen des Intervalls auf 0 führt nicht dazu, dass der Timer angehalten wird.Setting the interval to 0 does not cause the timer to stop.

BeispielExample

In diesem ersten Codebeispiel wird die Tageszeit in 1-Sekunden-Schritten erfasst.This first code example tracks the time of day in one-second increments. Darin werden Komponenten vom Typ Button, Label und Timer in einem Formular verwendet.It uses a Button, a Label, and a Timer component on a form. Die Interval-Eigenschaft ist auf 1000 (entspricht einer Sekunde) festgelegt.The Interval property is set to 1000 (equal to one second). Im Tick-Ereignis ist die Beschriftung der Label-Komponente auf die aktuelle Zeit festgelegt.In the Tick event, the label's caption is set to the current time. Wenn Sie auf die Schaltfläche klicken, wird die Enabled-Eigenschaft auf false festgelegt, sodass der Zeitgeber die Beschriftung der Label-Komponente nicht mehr aktualisiert.When the button is clicked, the Enabled property is set to false, stopping the timer from updating the label's caption. Für das folgende Codebeispiel ist es erforderlich, dass Sie über Button ein Formular Button1mit dem Timer Namen, Timer1ein-Steuer Label Element mit Label1dem Namen und ein-Steuerelement namens verfügen.The following code example requires that you have a form with a Button control named Button1, a Timer control named Timer1, and a Label control named 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;  
      }  
   }  

BeispielExample

In diesem zweiten Codebeispiel wird eine Prozedur alle 600 Millisekunden bis zum Ende einer Schleife ausgeführt.This second code example runs a procedure every 600 milliseconds until a loop has finished. Für das folgende Codebeispiel ist es erforderlich, dass Sie über Button ein Formular Button1mit dem Timer Namen, Timer1ein-Steuer Label Element mit Label1dem Namen und ein-Steuerelement namens verfügen.The following code example requires that you have a form with a Button control named Button1, a Timer control named Timer1, and a Label control named 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 auchSee also