SafeHandle.ReleaseHandle Methode

Definition

Führt beim Überschreiben in einer abgeleiteten Klasse den Code aus, der für das Freigeben des Handles erforderlich ist.

protected:
 abstract bool ReleaseHandle();
protected abstract bool ReleaseHandle ();
abstract member ReleaseHandle : unit -> bool
Protected MustOverride Function ReleaseHandle () As Boolean

Gibt zurück

true, wenn das Handle erfolgreich freigegeben wurde, andernfalls im Fall eines schwerwiegenden Fehlers false. In diesem Fall wird ein releaseHandleFailed-Assistent für verwaltetes Debuggen (Managed Debugging Assistant, MDA) generiert.

Beispiele

Das folgende Codebeispiel gibt das Handle frei und ist Teil eines größeren Beispiels für die SafeHandle -Klasse.

[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
override protected bool ReleaseHandle()
{
    // Here, we must obey all rules for constrained execution regions.
    return NativeMethods.CloseHandle(handle);
    // If ReleaseHandle failed, it can be reported via the
    // "releaseHandleFailed" managed debugging assistant (MDA).  This
    // MDA is disabled by default, but can be enabled in a debugger
    // or during testing to diagnose handle corruption problems.
    // We do not throw an exception because most code could not recover
    // from the problem.
}

Hinweise

Die ReleaseHandle -Methode wird garantiert nur einmal und nur aufgerufen, wenn das Handle gültig ist, wie von der IsInvalid -Eigenschaft definiert. Implementieren Sie diese Methode in Ihren abgeleiteten SafeHandle Klassen, um code auszuführen, der zum Freigeben des Handles erforderlich ist. Da eine der Funktionen von SafeHandle darin besteht, die Verhinderung von Ressourcenlecks zu gewährleisten, darf der Code in Ihrer Implementierung von niemals ReleaseHandle fehlschlagen. Der Garbage Collector ruft auf ReleaseHandle , nachdem normale Finalizer für Objekte ausgeführt wurden, die gleichzeitig garbage collection wurden. Der Garbage Collector garantiert, dass die Ressourcen diese Methode aufrufen, und dass die Methode nicht unterbrochen wird, während sie ausgeführt wird.

Darüber hinaus können Sie für einfache Bereinigungen (z. B. das Aufrufen der Windows-API CloseHandle für ein Dateihandle) den Rückgabewert für den Aufruf der einzelnen Plattform überprüfen. Für komplexe Bereinigungen verfügen Sie möglicherweise über eine Menge Programmlogik und viele Methodenaufrufe, von denen einige fehlschlagen können. Sie müssen sicherstellen, dass Ihre Programmlogik über Fallbackcode für jeden dieser Fälle verfügt.

Wenn ReleaseHandle aus irgendeinem Grund zurückgegeben false wird, wird bei der Ausführung auf .NET Framework ein releaseHandleFailed Managed Debugging Assistant generiert. Dies hilft Ihnen, Fälle zu erkennen, in denen der Versuch, Ressourcen freizugeben, fehlschlägt.

Gilt für:

Weitere Informationen