SafeHandle.ReleaseHandle Methode

Definitie

Wanneer deze wordt overschreven in een afgeleide klasse, voert u de code uit die is vereist om de ingang vrij te maken.

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

Retouren

true als de ingang is vrijgegeven; anders, in het geval van een catastrofale fout, false. In dit geval wordt een releaseHandleFailed Managed Debugging Assistant gegenereerd.

Voorbeelden

In het volgende codevoorbeeld wordt de ingang vrijgegeven en maakt deel uit van een groter voorbeeld dat voor de SafeHandle klasse is opgegeven.

[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.
}

Opmerkingen

De ReleaseHandle methode wordt gegarandeerd slechts één keer aangeroepen en alleen als de ingang geldig is zoals gedefinieerd door de IsInvalid eigenschap. Implementeer deze methode in uw SafeHandle afgeleide klassen om code uit te voeren die nodig is om de ingang vrij te maken. Omdat een van de functies SafeHandle is om het voorkomen van resourcelekken te garanderen, mag de code in uw implementatie ReleaseHandle nooit mislukken. De garbagecollector roept ReleaseHandle aan nadat normale finalizers zijn uitgevoerd voor objecten die op hetzelfde moment garbage zijn verzameld. De garbagecollector garandeert dat de resources deze methode aanroepen en dat de methode niet wordt onderbroken terwijl deze wordt uitgevoerd.

Daarnaast kunt u voor eenvoudige opschoning (bijvoorbeeld het aanroepen van de Windows API CloseHandle op een bestandsgreep) de retourwaarde voor de aanroep met één platform controleren. Voor complexe opschoning hebt u mogelijk veel programmalogica en veel methode-aanroepen, waarvan sommige mogelijk mislukken. U moet ervoor zorgen dat uw programmalogica terugvalcode bevat voor elk van deze gevallen.

Als ReleaseHandle om welke reden dan ook false retourneert, wordt er een releaseHandleFailed Managed Debugging Assistant gegenereerd wanneer deze wordt uitgevoerd op .NET Framework. Dit helpt u bij het detecteren van gevallen waarin uw poging om resources vrij te geven mislukt.

Van toepassing op

Zie ook