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)

virtual void Dispose() sealed



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.

using namespace System;
using namespace System::Threading;

ref class StatusChecker
    int invokeCount, maxCount;

    StatusChecker(int count)
        invokeCount  = 0;
        maxCount = count;

    // This method is called by the timer delegate.
    void CheckStatus(Object^ stateInfo)
        AutoResetEvent^ autoEvent = dynamic_cast<AutoResetEvent^>(stateInfo);
        Console::WriteLine("{0} Checking status {1,2}.",

        if (invokeCount == maxCount)
            // Reset the counter and signal Main.
            invokeCount  = 0;

ref class TimerExample
    static void Main()
        // Create an event to signal the timeout count threshold in the
        // timer callback.
        AutoResetEvent^ autoEvent     = gcnew AutoResetEvent(false);

        StatusChecker^  statusChecker = gcnew StatusChecker(10);

        // Create a delegate that invokes methods for the timer.
        TimerCallback^ tcb =
           gcnew TimerCallback(statusChecker, &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.\n",
        Timer^ stateTimer = gcnew 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("\nChanging period.\n");

        // When autoEvent signals the second time, dispose of
        // the timer.
        autoEvent->WaitOne(5000, false);
        Console::WriteLine("\nDestroying timer.");

int main()

.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.