Partager via


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

Mise à jour : novembre 2007

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 aux composants Timer serveur.

Remarque :

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. Consultez la section Exemple ci-dessous pour savoir comment effectuer cette opération par programme. Visual Studio prend également en charge l'ajout de composants à un formulaire.

  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.

    Remarque :

    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()
{
   //' 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;
      }
   }

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)