Auf Englisch lesen

Freigeben über


Timer.Dispose Methode

Definition

Gibt alle von der aktuellen Instanz von Timer verwendeten Ressourcen frei.

Überlädt

Dispose()

Gibt alle von der aktuellen Instanz von Timer verwendeten Ressourcen frei.

Dispose(WaitHandle)

Gibt alle von der aktuellen Instanz von Timer verwendeten Ressourcen frei, und signalisiert das Freigeben des Zeitgebers.

Dispose()

Gibt alle von der aktuellen Instanz von Timer verwendeten Ressourcen frei.

C#
public void Dispose ();

Implementiert

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie sie die Ressourcen freizugeben, die von einer Timer.

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

Hinweise

Das Aufrufen Dispose ermöglicht die Ressourcen, die von der Timer Neuzuweisung für andere Zwecke verwendet werden. Weitere Informationen Disposefinden Sie unter "Bereinigen nicht verwalteter Ressourcen".

Hinweis

Rückrufe können auftreten, nachdem die Methodenüberladung aufgerufen wurde, da die Timerrückrufe für die Dispose() Ausführung durch Threadpoolthreads in die Warteschlange gestellt werden. Sie können die Dispose(WaitHandle) Methodenüberladung verwenden, um zu warten, bis alle Rückrufe abgeschlossen sind.

Siehe auch

Gilt für

.NET 7 und andere Versionen
Produkt Versionen
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Dispose(WaitHandle)

Gibt alle von der aktuellen Instanz von Timer verwendeten Ressourcen frei, und signalisiert das Freigeben des Zeitgebers.

C#
public bool Dispose (System.Threading.WaitHandle notifyObject);

Parameter

notifyObject
WaitHandle

Das zu signalisierende WaitHandle, wenn der Timer freigegeben wurde.

Gibt zurück

Boolean

true, wenn die Funktion erfolgreich ausgeführt wird, andernfalls false.

Ausnahmen

Der notifyObject-Parameter ist null.

Hinweise

Das Aufrufen Dispose ermöglicht die Ressourcen, die von der Timer Neuzuweisung für andere Zwecke verwendet werden. Weitere Informationen Disposefinden Sie unter "Bereinigen nicht verwalteter Ressourcen".

Wenn diese Methode abgeschlossen ist, signalisiert sie den WaitHandle angegebenen Parameter notifyObject . Verwenden Sie diese Überladung der Methode, wenn Sie in der Dispose Lage sein möchten, zu blockieren, bis Sie sicher sind, dass der Timer verworfen wurde. Der Timer wird erst gelöscht, wenn alle aktuell in die Warteschlange gestellten Rückrufe abgeschlossen sind.

Hinweis

Wenn der Rückruf die Change Methode verwendet, um den dueTime Parameter auf Null festzulegen, kann eine Racebedingung auftreten, wenn die Dispose(WaitHandle) Methodenüberladung aufgerufen wird: Wenn der Timer einen neuen Rückruf anfordert, bevor die Dispose(WaitHandle) Methodenüberladung erkennt, dass keine Rückrufe in die Warteschlange gestellt werden, Dispose(WaitHandle) wird weiterhin blockiert; andernfalls wird der Timer verworfen, während der neue Rückruf in die Warteschlange gestellt wird, und wird ObjectDisposedException ausgelöst, wenn der neue Rückruf die Change Methode aufruft.

Siehe auch

Gilt für

.NET 7 und andere Versionen
Produkt Versionen
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 2.0, 2.1