CriticalHandle.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 Spravované ladění Pomocník.
Poznámky
Je ReleaseHandle zaručeno, že metoda bude volána pouze jednou, za předpokladu, že použijete správné synchronizační mechanismy, které zajistí, že je provedeno pouze jedno volání Close metody nebo Dispose . Metoda ReleaseHandle nebude volána, pokud IsInvalid je true
vlastnost nebo IsClosed . Implementujte tuto metodu v CriticalHandle 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 CriticalHandle 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, a zaručuje prostředky, aby je vyvolaly a že nebudou přerušeny, zatímco probíhá. Tato metoda bude připravena jako oblast omezeného provádění (CER) v době vytváření instance (spolu se všemi metodami v jejím staticky určitelném grafu volání). I když to zabraňuje přerušení vlákna, musíte být stále opatrní, abyste nezaveďte žádné cesty selhání v přepsané ReleaseHandle metodě. Konkrétně použijte atribut na ReliabilityContractAttribute všechny metody, které voláte z ReleaseHandle. Ve většině případů by tento kód měl být:
ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)
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 metoda z nějakého ReleaseHandle důvodu vrátí false
, vygeneruje releaseHandleFailed Spravované ladění Assistant.