Thread Timers
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer

Thread Timers

The Threading.Timer class is useful to periodically run 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 Control+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)
   Dim x As Integer
   ' Use the interlocked class to increment the counter variable.
   Debug.WriteLine("Launched new thread  " & Now)
   If State.TimerCanceled Then    ' Dispose Requested.
      Debug.WriteLine("Done  " & Now)
   End If
End Sub

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

See Also

Multithreaded Applications | Thread Pooling | Thread Synchronization | Parameters and Return Values for Multithreaded Procedures | Multithreading with Forms and Controls | System.Threading Namespace | SyncLock Statement

© 2016 Microsoft