Sdílet prostřednictvím


SafeHandle.ReleaseHandle Metoda

Definice

Při přepsání v odvozené třídě spustí kód potřebný k uvolnění popisovače.

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

Návraty

true je-li rukojeť úspěšně uvolněna; jinak v případě katastrofického selhání false. V tomto případě vygeneruje pomocníka pro spravované ladění releaseHandleFailed .

Příklady

Následující příklad kódu uvolní popisovač a je součástí většího příkladu poskytnutého SafeHandle pro třídu.

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

Poznámky

Metoda ReleaseHandle je zaručena, že bude volána pouze jednou a pouze v případě, že popisovač je platný podle definice IsInvalid vlastnosti. Implementujte tuto metodu do odvozených SafeHandle tříd, aby se spustil jakýkoli kód, který je nutný k uvolnění popisovače. Protože jednou z funkcí je zaručit prevenci úniků SafeHandle prostředků, kód ve vaší implementaci ReleaseHandle nesmí nikdy selhat. Volání ReleaseHandle uvolňování paměti po normálních finalizačních metodách byly spuštěny pro objekty, které byly uvolněny z paměti současně. Uvolňování paměti zaručuje, že prostředky vyvolat tuto metodu a že metoda nebude přerušena v průběhu.

Kromě toho můžete při jednoduchém vyčištění (například volání rozhraní API CloseHandle systému Windows na popisovači souboru) zkontrolovat návratovou hodnotu volání volání vyvolání jedné platformy. Pro komplexní vyčištění můžete mít spoustu logiky programu a mnoho volání metod, z nichž některé můžou selhat. Musíte zajistit, aby logika programu pro každý z těchto případů měl záložní kód.

Pokud ReleaseHandle se vrátí false z nějakého důvodu, vygeneruje pomocníka spravovaného ladění releaseHandleFailed při spuštění v rozhraní .NET Framework. To vám pomůže zjistit případy, kdy se pokus o vydání prostředků nezdaří.

Platí pro

Viz také