Partager via


Procédure : exécuter des procédures à intervalles définis avec le composant minuteur Windows Forms

Vous pouvez parfois créer une procédure qui s’exécute à intervalles de temps spécifiques jusqu’à ce qu’une boucle soit terminée ou qui s’exécute lorsqu’un intervalle de temps défini s’est écoulé. Le composant Timer rend possible une telle procédure.

Ce composant est conçu pour un environnement Windows Forms. Si vous avez besoin d’un minuteur adapté à un environnement de serveur, consultez Présentation des minuteurs Server-Based.

Remarque

Il existe certaines limitations lors de l’utilisation du composant Timer. Pour plus d'informations, consultez Limitations de la propriété Interval du composant Timer de Windows Forms.

Pour exécuter une procédure à intervalles définis avec le composant Minuteur

  1. Ajoutez une Timer à votre formulaire. Consultez la section Exemple suivant pour obtenir une illustration de la procédure à suivre par programme. Visual Studio prend également en charge l’ajout de composants à un formulaire. Consultez également Guide pratique pour ajouter des contrôles sans interface utilisateur auxWindows Forms.

  2. Définissez la propriété Interval (en millisecondes) pour le minuteur. Cette propriété détermine combien de temps s'écoulera avant que la procédure ne soit exécutée à nouveau.

    Remarque

    Plus un événement de minuteur se produit, plus le temps processeur est utilisé pour répondre à l’événement. Cela peut ralentir les performances globales. Ne définissez pas un intervalle inférieur à celui dont vous avez besoin.

  3. Écrivez du code approprié dans le gestionnaire d’événements Tick. Le code que vous écrivez dans cet événement s’exécute à l’intervalle spécifié dans la propriété Interval.

  4. Définissez la propriété Enabled sur true pour démarrer le minuteur. L’événement Tick commence à se produire, en exécutant votre procédure à l’intervalle défini.

  5. Au moment approprié, définissez la propriété Enabled sur false pour empêcher l’exécution de la procédure. La définition de l’intervalle sur 0 n’entraîne pas l’arrêt du minuteur.

Premier exemple de code

Ce premier exemple de code suit l’heure du jour par incréments d’une seconde. Il utilise un Button, un Label et un composant Timer sur un formulaire. La propriété Interval est définie sur 1 000 (égale à une seconde). Dans l’événement Tick, la légende de l’étiquette est définie sur l’heure actuelle. Lorsque le bouton est cliqué, la propriété Enabled est définie sur false, ce qui empêche le minuteur de mettre à jour la légende de l’étiquette. L’exemple de code suivant nécessite que vous ayez un formulaire avec un contrôle Button nommé Button1, un contrôle Timer nommé Timer1et 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;
      }
   }

Deuxième exemple de code

Ce deuxième exemple de code exécute une procédure toutes les 600 millisecondes jusqu’à ce qu’une boucle soit terminée. L’exemple de code suivant nécessite que vous ayez un formulaire avec un contrôle Button nommé Button1, un contrôle Timer nommé Timer1et 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();
      }
}
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