Freigeben über


CriticalHandle.ReleaseHandle-Methode: ()

 

Veröffentlicht: Oktober 2016

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

Namespace:   System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)

Syntax

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

Rückgabewert

Type: System.Boolean

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

Hinweise

Die ReleaseHandle -Methode wird garantiert nur einmal aufgerufen werden, wenn Sie ordnungsgemäße Synchronisierungsmechanismen, nur ein Aufruf von nutzen die Close oder Dispose Methode erfolgt. Die ReleaseHandle Methode wird nicht aufgerufen werden, wenn die IsInvalid oder IsClosed -Eigenschaft ist true. Implementieren Sie diese Methode in Ihrer CriticalHandle abgeleiteten Klassen, um Code auszuführen, der für das Freigeben des Handles erforderlich ist. Da eine der Funktionen von CriticalHandle besteht darin, Vermeidung von Ressourcenverlusten, den Code in der Implementierung der ReleaseHandle darf nie fehlschlagen. Der Garbage Collector ruft ReleaseHandle nachdem normale Finalizer für Objekte, die Garbage collection gleichzeitig ausgeführt wurden, und der Ressourcen aufgerufen und wird nicht unterbrochen werden zwar diese Garantien ausgeführt wird. Diese Methode wird zur Entwurfszeit (zusammen mit allen Methoden in der statisch bestimmbare Aufrufdiagramm) Instanz als einen eingeschränkten Ausführungsbereich (CER) vorbereitet werden. Dies verhindert, dass ein Thread Abort Interrupts, Sie weiterhin muss allerdings darauf achten, dass keine Fehler Pfade in der überschriebenen einführen ReleaseHandle Methode. Wenden Sie insbesondere das ReliabilityContractAttribute -Attribut auf alle Methoden, die Sie von Aufrufen ReleaseHandle. In den meisten Fällen sollte dieser Code:

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

Darüber hinaus für eine einfache Bereinigung (z. B. durch Aufruf der Win32-API- CloseHandle für ein Dateihandle) können Sie den Rückgabewert für den einzelnen Plattformaufruf überprüfen. Bei einer komplexen Bereinigung müssen Sie möglicherweise einen Großteil der Programmlogik und viele Methodenaufrufe, von die einige möglicherweise fehlschlagen. Sie müssen sicherstellen, dass die Programmlogik für jeden dieser Fälle fallback Code verfügt.

Wenn die ReleaseHandle -Methode gibt false aus irgendeinem Grund, generiert es ein releaseHandleFailed MDA -Assistent für verwaltetes Debuggen.

Versionsinformationen

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 2.0
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 8.0
Windows Phone
Verfügbar seit 8.1

Siehe auch

CriticalHandle-Klasse
System.Runtime.InteropServices-Namespace
Diagnosing Errors with Managed Debugging Assistants
releaseHandleFailed MDA

Zurück zum Anfang