Aracılığıyla paylaş


Nasıl yapılır: Windows Forms Zamanlayıcı Bileşeni ile Belirli Aralıklarla Yordamları Çalıştırma

Bazen bir döngü bitene kadar belirli zaman aralıklarında çalışan veya belirli bir zaman aralığı geçtiğinde devreye giren bir yordam oluşturmak isteyebilirsiniz. Timer bileşeni böyle bir yordamı mümkün kılar.

Bu bileşen bir Windows Forms ortamı için tasarlanmıştır. Sunucu ortamına uygun bir zamanlayıcıya ihtiyacınız varsa bkz. Server-Based Zamanlayıcılarına Giriş.

Uyarı

Timer bileşeni kullanılırken bazı sınırlamalar vardır. Daha fazla bilgi için bkz. Windows Forms Zamanlayıcı Bileşeninin Interval ÖzelliğiSınırlamaları.

Belirtilen aralıklarla bir yordam çalıştırmak için Zamanlayıcı bileşenini kullanın.

  1. Formunuza bir Timer ekleyin. Bunun program aracılığıyla nasıl yapıldığını gösteren bir çizim için aşağıdaki Örnek bölümüne bakın. Visual Studio'nun forma bileşen ekleme desteği de vardır. Ayrıca bkz. Nasıl yapılır: Kullanıcı Arayüzü Olmadan Windows Forms'a Denetim Ekleme.

  2. Zamanlayıcı için Interval özelliğini (milisaniye cinsinden) ayarlayın. Bu özellik, işlemin yeniden çalıştırılmasından önce ne kadar süre geçeceğini belirler.

    Uyarı

    Zamanlayıcı olayı ne kadar sık gerçekleşirse, olaya yanıt verirken işlemci süresi o kadar fazla kullanılır. Bu, genel performansı yavaşlatabilir. İhtiyacınız olandan daha küçük bir aralık ayarlamayın.

  3. Tick olay işleyicisine uygun kodu yazın. Bu olayda yazdığınız kod, Interval özelliğinde belirtilen aralıkta çalışır.

  4. Zamanlayıcıyı başlatmak için Enabled özelliğini true olarak ayarlayın. Tick olayı gerçekleşmeye başlar ve yordamınızı belirlenen aralıkta çalıştırır.

  5. İşlemin yeniden çalışmasını durdurmak için uygun zamanda Enabled özelliğini false olarak ayarlayın. Aralığın 0 olarak ayarlanması zamanlayıcının durmasına neden olmaz.

İlk kod örneği

Bu ilk kod örneği, günün saatini bir saniyelik artışlarla izler. Formda Button, Labelve Timer bileşeni kullanır. Interval özelliği 1000 (bir saniyeye eşit) olarak ayarlanır. Tick olayında etiket yazısı şu anki saate ayarlanır. Düğmeye tıklandığında, Enabled özelliği falseolarak ayarlanır ve zamanlayıcının etiketin resim yazısını güncelleştirmesini durdurur. Aşağıdaki kod örneği, Buttonadlı bir Button1 denetimine, Timeradlı bir Timer1 denetimine ve Labeladlı bir Label1 denetimine sahip bir formunuz olmasını gerektirir.

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

İkinci kod örneği

Bu ikinci kod örneği, döngü tamamlanana kadar her 600 milisaniyede bir yordam çalıştırır. Aşağıdaki kod örneği, Buttonadlı bir Button1 denetimine, Timeradlı bir Timer1 denetimine ve Labeladlı bir Label1 denetimine sahip bir formunuz olmasını gerektirir.

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

Ayrıca bakınız