SafeHandle.ReleaseHandle Metoda

Definicja

Po zastąpieniu w klasie pochodnej wykonuje kod wymagany do zwolnienia uchwytu.

protected:
 abstract bool ReleaseHandle();
protected abstract bool ReleaseHandle ();
abstract member ReleaseHandle : unit -> bool
Protected MustOverride Function ReleaseHandle () As Boolean

Zwraca

true jeśli uchwyt zostanie wydany pomyślnie; w przeciwnym razie w przypadku katastrofalnego błędu , false. W takim przypadku generuje on wydanieHandleFailed Managed Debug Assistant.

Przykłady

Poniższy przykład kodu zwalnia uchwyt i jest częścią większego przykładu podanego 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 być wywoływana tylko raz i tylko wtedy, gdy uchwyt jest prawidłowy zgodnie z definicją IsInvalid właściwości . Zaimplementuj tę metodę w klasach pochodnych, SafeHandle aby wykonać dowolny kod wymagany do zwolnienia uchwytu. Ponieważ jedną z funkcji jest SafeHandle zagwarantowanie zapobiegania wyciekom zasobów, kod w implementacji ReleaseHandle programu nigdy nie może zakończyć się niepowodzeniem. Moduł odśmiecujący pamięci wywołuje wywołania ReleaseHandle po normalnym finalizatorze zostały uruchomione dla obiektów, które zostały zebrane w tym samym czasie. 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 na dojściu do pliku) 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 z jakiegokolwiek powodu, generuje ona asystenta debugowania zarządzanego releaseHandleFailed podczas uruchamiania w .NET Framework. Ułatwia to wykrywanie przypadków, w których próba wydania zasobów kończy się niepowodzeniem.

Dotyczy

Zobacz też