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

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 Spravované ladění Pomocník.

Příklady

Následující příklad kódu uvolní popisovač a je součástí většího příkladu 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ý podle definice IsInvalid vlastnosti . Implementujte tuto metodu v SafeHandle odvozených třídách, aby se spustil jakýkoli kód, který je nutný k uvolnění popisovače. Vzhledem k tomu, že jednou z funkcí nástroje SafeHandle je zajištění prevence úniků prostředků, kód ve vaší implementaci ReleaseHandle nikdy nesmí selhat. Volání ReleaseHandle systému uvolňování paměti po normálních finalizačních metodách byla spuštěna pro objekty, které byly uvolněny z paměti ve stejnou dobu. Systém uvolňování paměti zaručuje prostředky pro vyvolání této metody a že metoda nebude během procesu přerušena.

Kromě toho pro jednoduché vyčištění (například volání rozhraní API CloseHandle systému Windows na popisovači souboru) můžete zkontrolovat návratovou hodnotu pro jedno volání volání platformy. Pro složité č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 vašeho programu pro každý z těchto případů získala záložní kód.

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

Platí pro

Viz také