This documentation is archived and is not being maintained.

Timer.Dispose Method

Releases all resources used by the current instance of Timer.

Namespace:  System.Threading
Assembly:  mscorlib (in mscorlib.dll)

Public Sub Dispose



Calling Dispose allows the resources used by the Timer to be reallocated for other purposes. For more information about Dispose, see Cleaning Up Unmanaged Resources.


Callbacks can occur after the Dispose method overload has been called, because the timer queues callbacks for execution by thread pool threads. You can use the Dispose(WaitHandle) method overload to wait until all callbacks have completed.

The following code example shows how to free the resources held by a Timer.

Imports Microsoft.VisualBasic
Imports System
Imports System.Threading

Public Class TimerExample

    <MTAThread> _
    Shared Sub Main()

        ' Create an event to signal the timeout count threshold in the
        ' timer callback.
        Dim autoEvent As New AutoResetEvent(False)

        Dim statusChecker As New StatusChecker(10)

        ' Create an inferred delegate that invokes methods for the timer.
        Dim tcb As TimerCallback = AddressOf statusChecker.CheckStatus

        ' Create a timer that signals the delegate to invoke
        ' CheckStatus after one second, and every 1/4 second
        ' thereafter.
        Console.WriteLine("{0} Creating timer." & vbCrLf, _
        Dim stateTimer As Timer = New Timer(tcb, autoEvent, 1000, 250)

        ' When autoEvent signals, change the period to every 
        ' 1/2 second.
        autoEvent.WaitOne(5000, False)
        stateTimer.Change(0, 500)
        Console.WriteLine(vbCrLf & "Changing period." & vbCrLf)

        ' When autoEvent signals the second time, dispose of 
        ' the timer.
        autoEvent.WaitOne(5000, False)
        Console.WriteLine(vbCrLf & "Destroying timer.")

    End Sub
End Class

Public Class StatusChecker

    Dim invokeCount, maxCount As Integer 

    Sub New(count As Integer)
        invokeCount  = 0
        maxCount = count
    End Sub

    ' This method is called by the timer delegate.
    Sub CheckStatus(stateInfo As Object)
        Dim autoEvent As AutoResetEvent = _
            DirectCast(stateInfo, AutoResetEvent)
        invokeCount += 1
        Console.WriteLine("{0} Checking status {1,2}.", _
            DateTime.Now.ToString("h:mm:ss.fff"), _

        If invokeCount = maxCount Then
            ' Reset the counter and signal to stop the timer.
            invokeCount  = 0
        End If
    End Sub

End Class

.NET Framework

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Portable Class Library

Supported in: Portable Class Library

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.