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

truepokud je popisovač úspěšně uvolněn; v opačném případě v případě katastrofického selhání . false V tomto případě vygeneruje releaseHandleFailed Managed Debugging Assistant.

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

Je ReleaseHandle zaručeno, že metoda bude volána pouze jednou a pouze v případě, že popisovač je platný, jak je definováno IsInvalid vlastností. Implementujte tuto metodu v SafeHandle odvozených třídách pro spuštění libovolného kódu, který je nutný k uvolnění popisovače. Vzhledem k tomu, že jednou z funkcí nástroje SafeHandle je zajištění prevence úniku prostředků, nesmí kód ve vaší implementaci ReleaseHandle nikdy selhat. Volání ReleaseHandle uvolňování paměti po normálních finalizátorech byla spuštěna pro objekty, které byly uvolněny z paměti ve stejnou dobu. Uvolňování paměti zaručuje prostředky pro vyvolání této metody a že metoda nebude přerušena, zatímco probíhá.

Kromě toho pro jednoduché vyčištění (například volání rozhraní WINDOWS API CloseHandle na popisovači souboru) můžete zkontrolovat návratovou hodnotu volání volání s jednou platformou. Pro komplexní č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 měla pro každý z těchto případů záložní kód.

Pokud ReleaseHandle se vrátí false z nějakého důvodu, vygeneruje releaseHandleFailed Managed Debugging Assistant při spuštění v rozhraní .NET Framework. To vám pomůže rozpoznat případy, kdy pokus o uvolnění prostředků selže.

Platí pro

Viz také