Partager via


Comment : exécuter des procédures à intervalles définis à l'aide du composant Timer Windows Forms

Il est parfois souhaitable de créer une procédure s'exécutant à intervalles définis jusqu'à ce qu'une boucle soit terminée ou qu'un délai soit écoulé. Le composant Timer permet de créer une telle procédure.

Ce composant est conçu pour un environnement Windows Forms. Si vous avez besoin d'une minuterie adaptée à un environnement serveur, consultez Introduction to Server-Based Timers.

Notes

Certaines limitations s'appliquent à l'utilisation du composant Timer. Pour plus d'informations, consultez Restrictions relatives à la propriété Interval du composant Timer Windows Forms.

Pour exécuter une procédure à intervalles définis à l'aide du composant Timer

  1. Ajoutez Timer au formulaire. Pour savoir comment effectuer cette opération par programmation, consultez la section Exemple suivante. Visual Studio permet également d'ajouter des composants à un formulaire. Pour plus d'informations, consultez Comment : ajouter des contrôles sans interface utilisateur à des Windows Forms et Comment : ajouter des contrôles sans interface utilisateur à des Windows Forms et Comment : ajouter des contrôles sans interface utilisateur à des Windows Forms et Comment : ajouter des contrôles sans interface utilisateur à des Windows Forms.

  2. Définissez la propriété Interval (en millisecondes) de la minuterie. Cette propriété détermine le délai qui doit s'écouler avant que la procédure ne soit de nouveau exécutée.

    Notes

    Plus un événement de minuterie se produit souvent, plus le temps processeur utilisé pour y répondre est important. Cela peut entraîner une dégradation des performances. Ne définissez pas un intervalle inférieur à ce dont vous avez besoin.

  3. Écrivez le code approprié dans le gestionnaire d'événements Tick. Ce code sera exécuté à l'intervalle spécifié par la propriété Interval.

  4. Affectez à la propriété Enabled la valeur true pour démarrer la minuterie. L'événement Tick va commencer à se produire et à exécuter votre procédure à l'intervalle indiqué.

  5. Au moment requis, affectez à la propriété Enabled la valeur false pour empêcher une nouvelle exécution de la procédure. Un intervalle dont la valeur est 0 n'entraîne pas l'arrêt de la minuterie.

Exemple

Ce premier exemple de code suit l'heure par incréments d'une seconde. Il utilise Button, Label et un composant Timer dans un formulaire. La propriété Interval a une valeur de 1 000 (égale à une seconde). Dans l'événement Tick, la légende de l'étiquette affiche l'heure actuelle. Lorsque l'utilisateur clique sur le bouton, la propriété Enabled prend la valeur false, ce qui met fin à la mise à jour de la légende de l'étiquette par la minuterie. L'exemple de code suivant nécessite l'utilisation d'un formulaire contenant un contrôle Button nommé Button1, un contrôle Timer nommé Timer1 et un contrôle Label nommé 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;
      }
   }

Ce deuxième exemple de code exécute une procédure à intervalles de 600 millisecondes jusqu'à ce qu'une boucle soit terminée. L'exemple de code suivant nécessite l'utilisation d'un formulaire contenant un contrôle Button nommé Button1, un contrôle Timer nommé Timer1 et un contrôle Label nommé 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();
      }
}
// 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());
      }
   }

Voir aussi

Référence

Vue d'ensemble du composant Timer (Windows Forms)

Timer

Autres ressources

Timer, composant (Windows Forms)