Timer.Dispose Yöntem

Tanım

Geçerli Timerörneği tarafından kullanılan tüm kaynakları serbest bırakır.Releases all resources used by the current instance of Timer.

Aşırı Yüklemeler

Dispose()

Geçerli Timerörneği tarafından kullanılan tüm kaynakları serbest bırakır.Releases all resources used by the current instance of Timer.

Dispose(WaitHandle)

Geçerli Timer örneği tarafından kullanılan tüm kaynakları serbest bırakır ve zamanlayıcının aktiften çıkarıldığı zaman sinyalidir.Releases all resources used by the current instance of Timer and signals when the timer has been disposed of.

Dispose()

Geçerli Timerörneği tarafından kullanılan tüm kaynakları serbest bırakır.Releases all resources used by the current instance of Timer.

public:
 virtual void Dispose();
public void Dispose ();
abstract member Dispose : unit -> unit
override this.Dispose : unit -> unit
Public Sub Dispose ()

Uygulamalar

Örnekler

Aşağıdaki kod örneğinde, Timertarafından tutulan kaynakların nasıl boşaltıyapılacağı gösterilmektedir.The following code example shows how to free the resources held by a Timer.

using namespace System;
using namespace System::Threading;

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

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

ref class TimerExample
{
public:
    static void Main()
    {
        // Create an AutoResetEvent to signal the timeout threshold in the
        // timer callback has been reached.
        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 invokes CheckStatus after one second, 
        // and every 1/4 second thereafter.
        Console::WriteLine("{0:h:mm:ss.fff} Creating timer.\n",
                           DateTime::Now);
        Timer^ stateTimer = gcnew Timer(tcb, autoEvent, 1000, 250);

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

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

int main()
{
    TimerExample::Main();
}
// The example displays output like the following:
//       11:59:54.202 Creating timer.
//       
//       11:59:55.217 Checking status  1.
//       11:59:55.466 Checking status  2.
//       11:59:55.716 Checking status  3.
//       11:59:55.968 Checking status  4.
//       11:59:56.218 Checking status  5.
//       11:59:56.470 Checking status  6.
//       11:59:56.722 Checking status  7.
//       11:59:56.972 Checking status  8.
//       11:59:57.223 Checking status  9.
//       11:59:57.473 Checking status 10.
//       
//       Changing period to .5 seconds.
//       
//       11:59:57.474 Checking status  1.
//       11:59:57.976 Checking status  2.
//       11:59:58.476 Checking status  3.
//       11:59:58.977 Checking status  4.
//       11:59:59.477 Checking status  5.
//       11:59:59.977 Checking status  6.
//       12:00:00.478 Checking status  7.
//       12:00:00.980 Checking status  8.
//       12:00:01.481 Checking status  9.
//       12:00:01.981 Checking status 10.
//       
//       Destroying timer.
using System;
using System.Threading;

class TimerExample
{
    static void Main()
    {
        // Create an AutoResetEvent to signal the timeout threshold in the
        // timer callback has been reached.
        var autoEvent = new AutoResetEvent(false);
        
        var statusChecker = new StatusChecker(10);

        // Create a timer that invokes CheckStatus after one second, 
        // and every 1/4 second thereafter.
        Console.WriteLine("{0:h:mm:ss.fff} Creating timer.\n", 
                          DateTime.Now);
        var stateTimer = new Timer(statusChecker.CheckStatus, 
                                   autoEvent, 1000, 250);

        // When autoEvent signals, change the period to every half second.
        autoEvent.WaitOne();
        stateTimer.Change(0, 500);
        Console.WriteLine("\nChanging period to .5 seconds.\n");

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

class StatusChecker
{
    private int invokeCount;
    private int  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 the waiting thread.
            invokeCount = 0;
            autoEvent.Set();
        }
    }
}
// The example displays output like the following:
//       11:59:54.202 Creating timer.
//       
//       11:59:55.217 Checking status  1.
//       11:59:55.466 Checking status  2.
//       11:59:55.716 Checking status  3.
//       11:59:55.968 Checking status  4.
//       11:59:56.218 Checking status  5.
//       11:59:56.470 Checking status  6.
//       11:59:56.722 Checking status  7.
//       11:59:56.972 Checking status  8.
//       11:59:57.223 Checking status  9.
//       11:59:57.473 Checking status 10.
//       
//       Changing period to .5 seconds.
//       
//       11:59:57.474 Checking status  1.
//       11:59:57.976 Checking status  2.
//       11:59:58.476 Checking status  3.
//       11:59:58.977 Checking status  4.
//       11:59:59.477 Checking status  5.
//       11:59:59.977 Checking status  6.
//       12:00:00.478 Checking status  7.
//       12:00:00.980 Checking status  8.
//       12:00:01.481 Checking status  9.
//       12:00:01.981 Checking status 10.
//       
//       Destroying timer.
Imports System.Threading

Public Module Example
    Public Sub Main()
        ' Use an AutoResetEvent to signal the timeout threshold in the
        ' timer callback has been reached.
        Dim autoEvent As New AutoResetEvent(False)

        Dim statusChecker As New StatusChecker(10)

        ' Create a timer that invokes CheckStatus after one second, 
        ' and every 1/4 second thereafter.
        Console.WriteLine("{0:h:mm:ss.fff} Creating timer." & vbCrLf, 
                          DateTime.Now)
        Dim stateTimer As New Timer(AddressOf statusChecker.CheckStatus, 
                                    autoEvent, 1000, 250)

        ' When autoEvent signals, change the period to every half second.
        autoEvent.WaitOne()
        stateTimer.Change(0, 500)
        Console.WriteLine(vbCrLf & "Changing period to .5 seconds." & vbCrLf)

        ' When autoEvent signals the second time, dispose of the timer.
        autoEvent.WaitOne()
        stateTimer.Dispose()
        Console.WriteLine(vbCrLf & "Destroying timer.")
    End Sub
End Module

Public Class StatusChecker
    Dim invokeCount, maxCount As Integer 

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

    ' The timer callback method.
    Sub CheckStatus(stateInfo As Object)
        Dim autoEvent As AutoResetEvent = DirectCast(stateInfo, AutoResetEvent)
        invokeCount += 1
        Console.WriteLine("{0:h:mm:ss.fff} Checking status {1,2}.", 
                          DateTime.Now, invokeCount)
        If invokeCount = maxCount Then
            ' Reset the counter and signal the waiting thread.
            invokeCount = 0
            autoEvent.Set()
        End If
    End Sub
End Class
' The example displays output like the following:
'       11:59:54.202 Creating timer.
'       
'       11:59:55.217 Checking status  1.
'       11:59:55.466 Checking status  2.
'       11:59:55.716 Checking status  3.
'       11:59:55.968 Checking status  4.
'       11:59:56.218 Checking status  5.
'       11:59:56.470 Checking status  6.
'       11:59:56.722 Checking status  7.
'       11:59:56.972 Checking status  8.
'       11:59:57.223 Checking status  9.
'       11:59:57.473 Checking status 10.
'       
'       Changing period to .5 seconds.
'       
'       11:59:57.474 Checking status  1.
'       11:59:57.976 Checking status  2.
'       11:59:58.476 Checking status  3.
'       11:59:58.977 Checking status  4.
'       11:59:59.477 Checking status  5.
'       11:59:59.977 Checking status  6.
'       12:00:00.478 Checking status  7.
'       12:00:00.980 Checking status  8.
'       12:00:01.481 Checking status  9.
'       12:00:01.981 Checking status 10.
'       
'       Destroying timer.

Açıklamalar

Dispose çağırmak, Timer tarafından kullanılan kaynakların başka amaçlar için yeniden tahsis etmesine olanak tanır.Calling Dispose allows the resources used by the Timer to be reallocated for other purposes. Disposehakkında daha fazla bilgi için bkz. yönetilmeyen kaynakları temizleme.For more information about Dispose, see Cleaning Up Unmanaged Resources.

Not

Zamanlayıcı, iş parçacığı havuzu iş parçacıklarının yürütülmesi için geri çağırmaları sıraya alındığından, Dispose() yöntemi aşırı yüklemesi çağrıldıktan sonra geri çağrılar gerçekleşebilir.Callbacks can occur after the Dispose() method overload has been called, because the timer queues callbacks for execution by thread pool threads. Tüm geri çağırmaların tamamlanmasını beklemek için Dispose(WaitHandle) yöntemi aşırı yüklemesini kullanabilirsiniz.You can use the Dispose(WaitHandle) method overload to wait until all callbacks have completed.

Ayrıca bkz.

Dispose(WaitHandle)

Geçerli Timer örneği tarafından kullanılan tüm kaynakları serbest bırakır ve zamanlayıcının aktiften çıkarıldığı zaman sinyalidir.Releases all resources used by the current instance of Timer and signals when the timer has been disposed of.

public:
 bool Dispose(System::Threading::WaitHandle ^ notifyObject);
public bool Dispose (System.Threading.WaitHandle notifyObject);
member this.Dispose : System.Threading.WaitHandle -> bool
Public Function Dispose (notifyObject As WaitHandle) As Boolean

Parametreler

notifyObject
WaitHandle

Timer aktiften çıkarıldığı zaman sinyal WaitHandle.The WaitHandle to be signaled when the Timer has been disposed of.

Döndürülenler

işlev başarılı olursa true; Aksi takdirde, false.true if the function succeeds; otherwise, false.

Özel durumlar

notifyObject parametresi null.The notifyObject parameter is null.

Açıklamalar

Dispose çağırmak, Timer tarafından kullanılan kaynakların başka amaçlar için yeniden tahsis etmesine olanak tanır.Calling Dispose allows the resources used by the Timer to be reallocated for other purposes. Disposehakkında daha fazla bilgi için bkz. yönetilmeyen kaynakları temizleme.For more information about Dispose, see Cleaning Up Unmanaged Resources.

Bu yöntem tamamlandığında, notifyObject parametresi tarafından belirtilen WaitHandle bildirir. Zamanlayıcının atıldığından emin olana kadar engelleyebilmek istiyorsanız Dispose yönteminin bu aşırı yüklemesini kullanın.When this method completes, it signals the WaitHandle specified by the notifyObject parameter.Use this overload of the Dispose method if you want to be able to block until you are certain that the timer has been disposed. Şu anda sıraya alınmış tüm geri çağrılar tamamlanana kadar Zamanlayıcı atılamaz.The timer is not disposed until all currently queued callbacks have completed.

Not

Geri arama, dueTime parametresini sıfır olarak ayarlamak için Change yöntemini kullanıyorsa, Dispose(WaitHandle) yöntem aşırı yüklemesi çağrıldığında bir yarış durumu oluşabilir: Dispose(WaitHandle) yöntemi aşırı yüklemesi, sıraya alınmış geri çağırmaların olmadığını algıladığında, Dispose(WaitHandle) engellemeye devam eder; Aksi takdirde, yeni geri çağırma sıraya alınırken süreölçer atılır ve yeni geri çağırma Change yöntemini çağırdığında bir ObjectDisposedException oluşturulur.If the callback uses the Change method to set the dueTime parameter to zero, a race condition can occur when the Dispose(WaitHandle) method overload is called: If the timer queues a new callback before the Dispose(WaitHandle) method overload detects that there are no callbacks queued, Dispose(WaitHandle) continues to block; otherwise, the timer is disposed while the new callback is being queued, and an ObjectDisposedException is thrown when the new callback calls the Change method.

Ayrıca bkz.

Şunlara uygulanır