Udostępnij przez


Instrukcje: uruchamianie procedur w ustawionych interwałach za pomocą składnika czasomierza 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 Introduction to Server-Based Timers.

Uwaga / Notatka

Istnieją pewne ograniczenia dotyczące używania składnika Timer. Aby uzyskać więcej informacji, zobacz Ograniczenia właściwości interwału składnika czasomierza formularzy systemu Windows.

Aby uruchomić procedurę w ustalonych odstępach czasowych przy użyciu komponentu Timer

  1. Dodaj 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ż How to: Add Controls Without a User Interface to Windows Forms (Jak dodać kontrolki bez interfejsu użytkownika do formularzy systemu Windows).

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

    Uwaga / Notatka

    Im częściej występuje zdarzenie timera, tym więcej czasu procesora jest zużywane na odpowiedź na to zdarzenie. Może to spowolnić ogólną wydajność. Nie należy ustawiać mniejszego interwału niż jest to potrzebne.

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

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

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

Pierwszy przykład kodu

Ten pierwszy przykładowy kod śledzi czas dnia w odstępach jednej sekundy. Używa składnika Button, składnika Labeli składnika Timer w formularzu. Właściwość Interval jest ustawiona na 1000 (równą jedną sekundę). W przypadku zdarzenia Tick podpis etykiety zostaje ustawiony na bieżący czas. Po kliknięciu przycisku właściwość Enabled zostaje ustawiona na false, co powoduje zatrzymanie czasomierza i uniemożliwia aktualizację podpisu etykiety. Poniższy przykład kodu wymaga formularza z kontrolką Button o nazwie Button1, kontrolką Timer o nazwie Timer1i kontrolką Label o nazwie 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;
      }
   }

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 Button1, kontrolką Timer o nazwie Timer1i kontrolką Label o nazwie 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());
      }
   }

Zobacz także