This documentation is archived and is not being maintained.

Running Procedures at Set Intervals With the Windows Forms Timer Component

Visual Studio .NET 2003

It is sometimes necessary to create a procedure that runs at specific time intervals until a loop has finished or that runs when a set time interval has elapsed. The Timer component makes such a procedure possible.

This component is designed for a Windows Forms environment. If you need a timer that is suitable for a server environment, see Introduction to Server-Based Timers.

Note   There are some limitations when using the Timer component. For more information, see Limitations of the Windows Forms Timer Component's Interval Property.

To run a procedure at set intervals with the Timer component

  1. Drag a Timer from the Windows Forms tab of the Toolbox to your form. For details see Adding Controls Without a User Interface to Windows Forms.
  2. Set the Interval property (in milliseconds) for the timer. This property determines how much time will pass before the procedure is run again.
    Note   The more often a timer event occurs, the more processor time is used in responding to the event. This can slow down overall performance. Do not set a smaller interval than you need.
  3. Write appropriate code in the Tick event handler. The code you write in this event will run at the interval specified in the Interval property.
  4. Set the Enabled property to true to start the timer. The Tick event will begin to occur, running your procedure at the set interval.
  5. At the appropriate time, set the Enabled property to false to stop the procedure from running again. Setting the interval to 0 does not cause the timer to stop.

Example 1

This example tracks the time of day in one-second increments. It uses a Button, a Label, and a Timer component on a form. The Interval property is set to 1000 (equal to one second). In the Timer event, the label's caption is set to the current time. When the button is clicked, the Enabled property is set to false, stopping the timer from updating the label's caption. The code below assumes you have a form with a Button control named Button1, a Timer control named Timer1, and a Label control named Label1.

' Visual Basic
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

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

// C#
private void InitializeTimer()
{
   //' Run this procedure in an appropriate event.
   // Set to 1 second.
   Timer1.Interval = 1000;
   // Enable timer.
   Timer1.Enabled = true;
   Button1.Text = "Stop";
}

private void Timer1_Tick(object Sender, EventArgs e)   
{
   // Set the caption to the current time.
   Label1.Text = DateTime.Now.ToString();
}

private void Button1_Click()
{
  if ( Button1.Text == "Stop" )
  {
    Button1.Text = "Start";
    Timer1.Enabled = false;
  }
  else
  {
    Button1.Text = "Stop";
    Timer1.Enabled = true;
  }
}

// C++
private:
   void InitializeTimer()
   {
      // Run this procedure in an appropriate event.
      // Set to 1 second.
      timer1->Interval = 1000;
      // Enable timer.
      timer1->Enabled = true;
      button1->Text = S"Stop";
   }

   System::Void timer1_Tick(System::Object *  sender,
      System::EventArgs *  e)
   {
      // Set the caption to the current time.
      label1->Text = DateTime::Now.ToString();
   }

   System::Void button1_Click(System::Object *  sender,
      System::EventArgs *  e)
   {
      if ( button1->Text == S"Stop" )
      {
         button1->Text = S"Start";
         timer1->Enabled = false;
      }
      else
      {
         button1->Text = S"Stop";
         timer1->Enabled = true;
      }
   }

Example 2

This example runs a procedure every 600 milliseconds until a loop has finished. The code below assumes you have a form with a Button control named Button1, a Timer control named Timer1, and a Label control named Label1.

' Visual Basic
' 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

// C#
// 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();
      }
}

// C++
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 += new System::EventHandler(this, timer1_Tick);
   }

   System::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(S"Procedures Run: ",
            counter.ToString());
      }
   }

See Also

Timer Component (Windows Forms) | Introduction to the Windows Forms Timer Component | Timer Class

Show: