Dela via


Anvisningar: Kör procedurer vid angivna intervall med tidsinställd Windows Forms-komponent

Ibland kanske du vill skapa en procedur som körs med specifika tidsintervall tills en loop har slutförts eller som körs när ett angivet tidsintervall har förflutit. Den Timer komponenten gör en sådan procedur möjlig.

Den här komponenten är utformad för en Windows Forms-miljö. Om du behöver en timer som är lämplig för en servermiljö kan du läsa Introduktion till Server-Based Timers.

Anmärkning

Det finns vissa begränsningar när du använder komponenten Timer. För mer information, se Begränsningar av Windows Forms Timer-komponentens intervallegenskap.

Så här kör du en procedur med angivna intervall med Timer-komponenten

  1. Lägg till en Timer i formuläret. Se följande exempelavsnitt för en bild av hur du gör detta programmatiskt. Visual Studio har också stöd för att lägga till komponenter i ett formulär. Se också Hur man: Lägger till kontroller utan ett användargränssnitt i Windows Forms.

  2. Ange egenskapen Interval (i millisekunder) för timern. Den här egenskapen avgör hur lång tid det tar innan proceduren körs igen.

    Anmärkning

    Ju oftare en timerhändelse inträffar, desto mer processortid används för att svara på händelsen. Detta kan göra den övergripande prestandan långsammare. Ange inte ett mindre intervall än du behöver.

  3. Skriv lämplig kod i Tick händelsehanterare. Koden som du skriver i den här händelsen körs med det intervall som anges i egenskapen Interval.

  4. Ange egenskapen Enabled till true för att starta timern. Evenemanget Tick kommer att börja inträffa, och köra din procedur med angivet intervall.

  5. Vid lämplig tidpunkt anger du egenskapen Enabled till false för att stoppa proceduren från att köras igen. Att ställa in intervallet på 0 gör inte att timern stoppas.

Första kodexemplet

Det första kodexemplet spårar tiden på dagen i steg om en sekund. Den använder en Button, en Labeloch en Timer komponent i ett formulär. Egenskapen Interval är inställd på 1 000 (lika med en sekund). Vid händelse Tick ställs etikettens text in till den aktuella tiden. När du klickar på knappen är egenskapen Enabled inställd på false, vilket hindrar timern från att uppdatera etikettens bildtext. Följande kodexempel kräver att du har ett formulär med en Button-kontroll med namnet Button1, en Timer-kontroll med namnet Timer1och en Label-kontroll med namnet 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;
      }
   }

Andra kodexemplet

Det andra kodexemplet kör en procedur var 600:e millisekunder tills en loop har slutförts. Följande kodexempel kräver att du har ett formulär med en Button-kontroll med namnet Button1, en Timer-kontroll med namnet Timer1och en Label-kontroll med namnet 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());
      }
   }

Se även