SafeHandle.ReleaseHandle Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Po przesłonięcia w klasie pochodnej program wykonuje kod wymagany do zwolnienia dojścia.
protected:
abstract bool ReleaseHandle();
protected abstract bool ReleaseHandle ();
abstract member ReleaseHandle : unit -> bool
Protected MustOverride Function ReleaseHandle () As Boolean
Zwraca
true
w przypadku pomyślnego zwolnienia dojścia; w przeciwnym razie w przypadku katastrofalnego błędu, false
. W takim przypadku generuje on asystenta debugowania zarządzanego releaseHandleFailed .
Przykłady
Poniższy przykład kodu zwalnia dojście i jest częścią większego przykładu udostępnionego SafeHandle dla klasy.
[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.
}
Uwagi
Metoda ReleaseHandle ma gwarancję wywołania tylko raz i tylko wtedy, gdy dojście jest prawidłowe zgodnie z definicją IsInvalid właściwości . Zaimplementuj tę metodę w SafeHandle klasach pochodnych, aby wykonać dowolny kod wymagany do zwolnienia dojścia. Ponieważ jedną z funkcji programu SafeHandle jest zagwarantowanie zapobiegania wyciekom zasobów, kod w implementacji ReleaseHandle programu nie może zakończyć się niepowodzeniem. Moduł odśmiecany pamięci wywołuje wywołania ReleaseHandle po uruchomieniu normalnych finalizatorów dla obiektów, które zostały w tym samym czasie odebrane. Moduł odśmiecywania pamięci gwarantuje, że zasoby będą wywoływać tę metodę i że metoda nie zostanie przerwana, gdy jest w toku.
Ponadto w celu prostego czyszczenia (na przykład wywoływania interfejsu API CloseHandle
systemu Windows w dojściu plików) można sprawdzić wartość zwracaną dla wywołania wywołania pojedynczej platformy. W przypadku złożonego czyszczenia może istnieć wiele logiki programu i wiele wywołań metod, z których niektóre mogą zakończyć się niepowodzeniem. Upewnij się, że logika programu ma kod rezerwowy dla każdego z tych przypadków.
Jeśli ReleaseHandle funkcja zwraca false
jakiekolwiek przyczyny, generuje ona asystenta debugowania zarządzanego releaseHandleFailed podczas uruchamiania w programie .NET Framework. Ułatwia to wykrywanie przypadków, w których próba wydania zasobów kończy się niepowodzeniem.