Sdílet prostřednictvím


Postupy: Spouštění procedur v nastavených intervalech pomocí součásti Windows Forms Timer

Někdy můžete chtít vytvořit proceduru, která se spouští v určitých časových intervalech, dokud se smyčka nedokončí nebo když uplynul nastavený časový interval. Komponenta Timer takový postup umožňuje.

Tato komponenta je určená pro model Windows Forms prostředí. Pokud potřebujete časovač, který je vhodný pro serverové prostředí, přečtěte si téma Úvod k časovačům založeným na serveru.

Poznámka:

Při používání Timer komponenty existují určitá omezení. Další informace naleznete v tématu Omezení vlastnosti intervalu komponenty časovače model Windows Forms.

Spuštění procedury v nastavených intervalech pomocí komponenty Časovač

  1. Přidejte ho Timer do formuláře. V následující části Příklad najdete obrázek toho, jak to udělat programově. Visual Studio také podporuje přidávání komponent do formuláře. Viz Také postup: Přidání ovládacích prvků bez uživatelského rozhraní pro model Windows Forms.

  2. Interval Nastavte vlastnost (v milisekundách) časovače. Tato vlastnost určuje, kolik času bude před dalším spuštěním procedury.

    Poznámka:

    Častěji dochází k události časovače, tím více času procesoru se používá při odpovídání na událost. To může zpomalit celkový výkon. Nenastavujte menší interval, než potřebujete.

  3. Do obslužné rutiny Tick události napište odpovídající kód. Kód, který napíšete v této události, se spustí v intervalu zadaném Interval ve vlastnosti.

  4. Enabled Nastavte vlastnost tak, aby true se spustil časovač. Událost Tick začne probíhat a spustí se váš postup v nastaveném intervalu.

  5. V příslušné době nastavte Enabled vlastnost tak, aby false se procedura znovu zastavila. Nastavením intervalu nedojde k 0 zastavení časovače.

První příklad kódu

Tento první příklad kódu sleduje denní dobu v jednom sekundovém přírůstku. Používá komponentu Button, a LabelTimer a to ve formuláři. Vlastnost Interval je nastavena na hodnotu 1000 (rovná se jedné sekundě). Tick V případě je popis popisku nastaven na aktuální čas. Po kliknutí na Enabled tlačítko je vlastnost nastavena na false, zastavení časovače v aktualizaci popis popisku. Následující příklad kódu vyžaduje, aby máte formulář s ovládacím Button prvku s názvem , Timer s názvem Button1Timer1ovládacího prvku a Label s názvem Label1ovládacího prvku .

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;  
      }  
   }  

Druhý příklad kódu

Tento druhý příklad kódu spustí proceduru každých 600 milisekund, dokud smyčka nedokončí. Následující příklad kódu vyžaduje, aby máte formulář s ovládacím Button prvku s názvem , Timer s názvem Button1Timer1ovládacího prvku a Label s názvem Label1ovládacího prvku .

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

Viz také