Timer In C#

In this tutorial, learn how to implement a Timer in C#. The Timer control represented by C# Timer class executes a code block at a specified interval of time repeatedly. For example, backing up a folder every 10 minutes, or writing to a log file every second. The method that needs to be executed is placed inside the event of the timer. 

Windows Forms has a Timer control that can be dropped to a Form and set its properties. Learn how to use a Timer in C# to write to a text file repeatedly at a certain interval of time.  

C# Timer Code Example


Let’s create a Windows application that will use a timer to write some text to a text file every 5 seconds. Our Windows Forms application has two buttons, Start and Stop. The application will write a line to a text file every 1 second once the Start button is clicked. The application stops writing to the text file once the Stop button is clicked.

Step 1

Open Visual Studio and create a Windows Forms application.

Step 2

Add two Button controls to the Form and name them Start and Stop. You may also want to change their names. In my case, I have changed their names to StartButton and StopButton, respectively. The final Form looks like the following image.
 
Timer In C#

Note
We will create a text file, C:\temp\mcb.txt. Please change this folder and file name to the name you like. If you want to use the same name, please make sure you have a folder C:\temp on your computer.

Step 3

Now let’s add a Timer control to the form. Drag and drop a Timer control from Visual Studio Toolbox to the Form. This will add a Timer control, timer1 to the form.

Step 4

Now, we’re going to set Timer’s property.

Right click on the Timer control and open Properties window. Set the Interval property to 1000. The value of Interval property is in milliseconds.

1 sec = 1000 milliseconds.

See below. 

Timer In C#

Step 5
 
Now click on the Events button and add a Timer event handler by double clicking on the Tick property. The Timer event is timer1_Tick. See below.
 
Timer In C#

Step 6
 
Now I add a FileStream and a StreamWriter object in the beginning of the class. These classes are used to create a new text file and write to the text file.

The classes are defined in the System.IO namespace. Make sure to import System.IO namespace at the top of the class.

  1. using System.IO;  

As you can see from the following code, the FileStream class creates a mcb.txt file and StreamWriter will be used to write to the file.

  1. private static FileStream fs = new FileStream(@"c:\temp\mcb.txt", FileMode.OpenOrCreate, FileAccess.Write);    
  2. private static StreamWriter m_streamWriter = new StreamWriter(fs);   

Now write the following code in the Form Load event,

  1. private void Form1_Load(object sender, System.EventArgs e)    
  2. {    
  3.     // Write to the file using StreamWriter class    
  4.     m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);    
  5.     m_streamWriter.Write(" File Write Operation Starts : ");    
  6.     m_streamWriter.WriteLine("{0} {1}",     
  7.     DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString());    
  8.     m_streamWriter.WriteLine("===================================== \n");    
  9.     m_streamWriter.Flush();    
  10. }    

As you can see from the above code, this code writes some lines to the file.

Now write code on the Start and Stop button click handlers. As you can see from the following code, the Start button click sets the timer's Enabled property to true. Setting the timer's Enabled property starts the timer to execute the timer event. I set the Enabled property to false on the Stop button click event handler, that stops executing the timer tick event.

  1. private void button1_Click(object sender, System.EventArgs e)    
  2. {    
  3.     timer1.Enabled =true;    
  4. }    
  5. private void button2_Click(object sender, System.EventArgs e)    
  6. {    
  7.     timer1.Enabled =false;    
  8. }    

Now the last step is to write the timer's tick event to write the current time to the text file. Write the following code in your timer event,

  1. private void timer1_Tick(object sender, System.EventArgs e)    
  2. {    
  3.     m_streamWriter.WriteLine("{0} {1}",     
  4.     DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString());    
  5.     m_streamWriter.Flush();    
  6. }    

Step 7

Build and Run the application.

Click on Start button to start writing to the text file. Run it for a minute or so, click on Stop button to stop it.

The output mcb.txt file looks like the following image.

Timer In C#
 

Using Timer at run-time in C#

We just saw how to use a Timer at design time using Visual Studio designer. But you may need to use a timer at run time.

The Timer class in C# represents a timer at runtime. Here are some useful members of the Timer class.

Tick This event occurs when the Interval has elapsed. 
Start Starts raising the Tick event by setting Enabled to true. 
Stop Stops raising the Tick event by setting Enabled to false. 
Close Releases the resources used by the Timer. 
AutoReset Indicates whether the Timer raises the Tick event each time the specified Interval has elapsed or whether the Tick event is raised only once after the first interval has elapsed.
Interval Indicates the interval on which to raise the Tick event.
Enabled Indicates whether the Timer raises the Tick event.

The following code snippet creates a Timer at run-time, sets its property and also adds an event handler. In this code, we set Timer’s Interval to 2 second.

  1. Timer timer1 = new Timer    
  2. {    
  3.     Interval = 2000    
  4. };    
  5. timer1.Enabled = true;    
  6. timer1.Tick += new System.EventHandler(OnTimerEvent);    

Let’s say, we want to display some text in a ListBox control. The following code adds text and updates the ListBox every 2 second.

  1. private void OnTimerEvent(object sender, EventArgs e)    
  2. {    
  3.    listBox1.Items.Add(DateTime.Now.ToLongTimeString() + "," +DateTime.Now.ToLongDateString());    
  4. }    

How to use the Timer class to raise an event after a certain interval?

The following code will use the Timer class to raise an event every 5 seconds,

  1. Timer timer1 = new Timer    
  2. {    
  3.     Interval = 5000    
  4. };    
  5. timer1.Enabled = true;    
  6. timer1.Tick += new System.EventHandler(OnTimerEvent);    

Write the event handler


This event will be executed every 5 seconds,
  1. public static void OnTimerEvent(object source, EventArgs e)    
  2. {    
  3.     m_streamWriter.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString());    
  4.     m_streamWriter.Flush();    
  5. }    

Summary

In this article, we discussed how to use a timer in C#. We also saw how to create a Windows application with a Timer control and use it to execute code at a certain interval of time.