Export (0) Print
Expand All

Timer.Dispose Method

Releases all resources used by the current instance of Timer.

Overload List

Releases all resources used by the current instance of Timer.

Supported by the .NET Compact Framework.

[Visual Basic] Overloads Public Overridable Sub Dispose() Implements IDisposable.Dispose
[C#] public virtual void Dispose();
[C++] public: virtual void Dispose();
[JScript] public function Dispose();

Releases all resources used by the current instance of Timer and signals when the timer has been disposed of.

[Visual Basic] Overloads Public Function Dispose(WaitHandle) As Boolean
[C#] public bool Dispose(WaitHandle);
[C++] public: bool Dispose(WaitHandle*);
[JScript] public function Dispose(WaitHandle) : Boolean;

Example

[Visual Basic, C#, C++] The following code example shows how to free the resources held by a Timer.

[Visual Basic, C#, C++] Note   This example shows how to use one of the overloaded versions of Dispose. For other examples that might be available, see the individual overload topics.
[Visual Basic] 
Imports Microsoft.VisualBasic
Imports System
Imports System.Threading

Public Class TimerExample

    Shared Sub Main()
    
        Dim autoEvent As New AutoResetEvent(False)
        Dim statusChecker As New StatusChecker(10)

        ' Create the delegate that invokes methods for the timer.
        Dim timerDelegate 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, _
            DateTime.Now.ToString("h:mm:ss.fff"))
        Dim stateTimer As Timer = _
                New Timer(timerDelegate, 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)
        stateTimer.Dispose()
        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"), _
            invokeCount.ToString())

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

End Class

[C#] 
using System;
using System.Threading;

class TimerExample
{
    static void Main()
    {
        AutoResetEvent autoEvent     = new AutoResetEvent(false);
        StatusChecker  statusChecker = new StatusChecker(10);

        // Create the delegate that invokes methods for the timer.
        TimerCallback timerDelegate = 
            new TimerCallback(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", 
            DateTime.Now.ToString("h:mm:ss.fff"));
        Timer stateTimer = 
                new Timer(timerDelegate, 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);
        stateTimer.Dispose();
        Console.WriteLine("\nDestroying timer.");
    }
}

class StatusChecker
{
    int invokeCount, maxCount;

    public StatusChecker(int count)
    {
        invokeCount  = 0;
        maxCount = count;
    }

    // This method is called by the timer delegate.
    public void CheckStatus(Object stateInfo)
    {
        AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
        Console.WriteLine("{0} Checking status {1,2}.", 
            DateTime.Now.ToString("h:mm:ss.fff"), 
            (++invokeCount).ToString());

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

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;

__gc class StatusChecker
{
    int invokeCount, maxCount;
public:
    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(S"{0} Checking status {1,2}.", 
            DateTime::Now.ToString("h:mm:ss.fff"), 
            (++invokeCount).ToString());

        if(invokeCount == maxCount)
        {
            // Reset the counter and signal main.
            invokeCount  = 0;
            autoEvent->Set();
        }
    }
};

void main()
{
    AutoResetEvent* autoEvent     = new AutoResetEvent(false);
    StatusChecker*  statusChecker = new StatusChecker(10);

    // Create the delegate that invokes methods for the timer.
    TimerCallback* timerDelegate = 
        new 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(S"{0} Creating timer.\n", 
        DateTime::Now.ToString("h:mm:ss.fff"));
    Timer* stateTimer = 
        new Timer(timerDelegate, autoEvent, 1000, 250);

    // When autoEvent signals, change the period to every 1/2 second.
    autoEvent->WaitOne(5000, false);
    stateTimer->Change(0, 500);
    Console::WriteLine(S"\nChanging period.\n");

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

[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

See Also

Timer Class | Timer Members | System.Threading Namespace

Show:
© 2014 Microsoft