We recommend using Visual Studio 2017
This documentation is archived and is not being maintained.

Thread Timers (C# and Visual Basic)

The Timer class is useful for periodically running a task on a separate thread. For example, you could use a thread timer to check the status and integrity of a database or to back up critical files.

The following example starts a task every two seconds and uses a flag to initiate the Dispose method that stops the timer. This example posts status to the output window.

private class StateObjClass
    // Used to hold parameters for calls to TimerTask. 
    public int SomeValue;
    public System.Threading.Timer TimerReference;
    public bool TimerCanceled;

public void RunTimer()
    StateObjClass StateObj = new StateObjClass();
    StateObj.TimerCanceled = false;
    StateObj.SomeValue = 1;
    System.Threading.TimerCallback TimerDelegate =
        new System.Threading.TimerCallback(TimerTask);

    // Create a timer that calls a procedure every 2 seconds. 
    // Note: There is no Start method; the timer starts running as soon as  
    // the instance is created.
    System.Threading.Timer TimerItem =
        new System.Threading.Timer(TimerDelegate, StateObj, 2000, 2000);

    // Save a reference for Dispose.
    StateObj.TimerReference = TimerItem;  

    // Run for ten loops. 
    while (StateObj.SomeValue < 10) 
        // Wait one second.

    // Request Dispose of the timer object.
    StateObj.TimerCanceled = true;  

private void TimerTask(object StateObj)
    StateObjClass State = (StateObjClass)StateObj;
    // Use the interlocked class to increment the counter variable.
    System.Threading.Interlocked.Increment(ref State.SomeValue);
    System.Diagnostics.Debug.WriteLine("Launched new thread  " + DateTime.Now.ToString());
    if (State.TimerCanceled)    
    // Dispose Requested.
        System.Diagnostics.Debug.WriteLine("Done  " + DateTime.Now.ToString());

Thread timers are particularly useful when the Timer object is unavailable, such as when you are developing console applications.