This documentation is archived and is not being maintained.

Thread Timers

The System.Threading.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, so you should make this window visible by pressing CTRL+ALT+O before you test the code.

Class StateObjClass
    ' Used to hold parameters for calls to TimerTask 
    Public SomeValue As Integer 
    Public TimerReference As System.Threading.Timer
    Public TimerCanceled As Boolean 
End Class 

Sub RunTimer()
    Dim StateObj As New StateObjClass
    StateObj.TimerCanceled = False
    StateObj.SomeValue = 1
    Dim TimerDelegate As New Threading.TimerCallback(AddressOf 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. 
    Dim TimerItem As New System.Threading.Timer(TimerDelegate, StateObj, _
                                                2000, 2000)
    StateObj.TimerReference = TimerItem  ' Save a reference for Dispose.

    While StateObj.SomeValue < 10 ' Run for ten loops.
        System.Threading.Thread.Sleep(1000)  ' Wait one second.
    End While

    StateObj.TimerCanceled = True  ' Request Dispose of the timer object.
End Sub 

Sub TimerTask(ByVal StateObj As Object)
    Dim State As StateObjClass = CType(StateObj, StateObjClass)
    ' Use the interlocked class to increment the counter variable.
    System.Diagnostics.Debug.WriteLine("Launched new thread  " & Now)
    If State.TimerCanceled Then    ' Dispose Requested.
        System.Diagnostics.Debug.WriteLine("Done  " & Now)
    End If 
End Sub

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