Freigeben über


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

Hinweise

Die ReleaseHandle Methode wird garantiert nur einmal aufgerufen, vorausgesetzt, Sie verwenden geeignete Synchronisierungsmechanismen, um sicherzustellen, dass nur ein Aufruf der Close -Methode oder Dispose erfolgt. Die ReleaseHandle -Methode wird nicht aufgerufen, wenn die - oder IsClosed -IsInvalidEigenschaft isttrue. Implementieren Sie diese Methode in Ihren abgeleiteten CriticalHandle Klassen, um Code auszuführen, der zum Freigeben des Handles erforderlich ist. Da eine der Funktionen von CriticalHandle darin besteht, die Verhinderung von Ressourcenlecks zu gewährleisten, darf der Code in Ihrer Implementierung von ReleaseHandle niemals fehlschlagen. Der Garbage Collector ruft auf ReleaseHandle , nachdem normale Finalizer für Objekte ausgeführt wurden, die zur gleichen Zeit gesammelten Müll gesammelt wurden, und garantiert, dass die Ressourcen ihn aufrufen und dass er während der Ausführung nicht unterbrochen wird. Diese Methode wird zur Instanzerstellungszeit (zusammen mit allen Methoden in ihrem statisch bestimmbaren Aufrufgraphen) als eingeschränkte Ausführungsregion (CER) vorbereitet. Obwohl dadurch Threadabbruchunterbrechungen verhindert werden, müssen Sie dennoch darauf achten, keine Fehlerpfade in Ihre überschriebene ReleaseHandle Methode einzuführen. Wenden Sie das ReliabilityContractAttribute Attribut insbesondere auf alle Methoden an, die Sie von ReleaseHandleaufrufen. In den meisten Fällen sollte dieser Code wie folgt sein:

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

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 einer einzelnen Plattform überprüfen. Für komplexe Bereinigungen verfügen Sie möglicherweise über viel Programmlogik und viele Methodenaufrufe, von denen einige möglicherweise fehlschlagen. Sie müssen sicherstellen, dass Ihre Programmlogik über Fallbackcode für jeden dieser Fälle verfügt.

Wenn die ReleaseHandle Methode aus irgendeinem Grund zurückgibt false , generiert sie einen releaseHandleFailed Managed Debugging-Assistenten.

Gilt für:

Weitere Informationen