SafeHandle.ReleaseHandle Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
pokud 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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro