Porady: uruchamianie procedur w ustalonych odstępach czasu za pomocą składnika Timer formularzy systemu Windows

Czasami można utworzyć procedurę uruchamianą w określonych interwałach czasu do momentu zakończenia pętli lub uruchomienia, gdy upłynął ustawiony interwał czasu. Składnik Timer umożliwia taką procedurę.

Ten składnik jest przeznaczony dla środowiska Windows Forms. Jeśli potrzebujesz czasomierza odpowiedniego dla środowiska serwera, zobacz Wprowadzenie do czasomierzy opartych na serwerze.

Uwaga

W przypadku korzystania z Timer składnika występują pewne ograniczenia. Aby uzyskać więcej informacji, zobacz Ograniczenia właściwości interwału składnika czasomierza formularzy systemu Windows.

Aby uruchomić procedurę w określonych interwałach ze składnikiem czasomierza

  1. Dodaj element Timer do formularza. Zapoznaj się z poniższą sekcją Przykład, aby zapoznać się z ilustracją, jak to zrobić programowo. Program Visual Studio obsługuje również dodawanie składników do formularza. Zobacz również Instrukcje: dodawanie kontrolek bez interfejsu użytkownika do formularzy systemu Windows.

  2. Interval Ustaw właściwość (w milisekundach) dla czasomierza. Ta właściwość określa, ile czasu minie przed ponownym uruchomieniem procedury.

    Uwaga

    Częściej występuje zdarzenie czasomierza, tym więcej czasu procesora jest używany w odpowiedzi na zdarzenie. Może to spowolnić ogólną wydajność. Nie należy ustawiać mniejszego interwału niż jest to potrzebne.

  3. Napisz odpowiedni kod w procedurze obsługi zdarzeń Tick . Kod, który piszesz w tym zdarzeniu, zostanie uruchomiony w interwale określonym we Interval właściwości .

  4. Enabled Ustaw właściwość na , aby true uruchomić czasomierz. Zdarzenie Tick rozpocznie się, uruchamiając procedurę w ustawionym interwale.

  5. W odpowiednim czasie ustaw Enabled właściwość na wartość , aby false zatrzymać ponowne uruchomienie procedury. Ustawienie interwału 0 na wartość nie powoduje zatrzymania czasomierza.

Pierwszy przykład kodu

Ten pierwszy przykładowy kod śledzi czas dnia w odstępach jednej sekundy. Używa on elementu Button, , Labeli Timer składnika w formularzu. Właściwość jest ustawiona Interval na 1000 (równa jednej sekundzie). Tick W przypadku podpis etykiety jest ustawiona na bieżący czas. Po kliknięciu Enabled przycisku właściwość jest ustawiona na false, zatrzymując czasomierz podczas aktualizowania podpis etykiety. Poniższy przykład kodu wymaga formularza z kontrolką Button o nazwie , kontrolką Timer o nazwie Button1i kontrolką Label o nazwie Timer1Label1.

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

Drugi przykład kodu

Ten drugi przykład kodu uruchamia procedurę co 600 milisekund do momentu zakończenia pętli. Poniższy przykład kodu wymaga formularza z kontrolką Button o nazwie , kontrolką Timer o nazwie Button1i kontrolką Label o nazwie Timer1Label1.

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

Zobacz też