Udostępnij za pośrednictwem


SafeHandle.ReleaseHandle Metoda

Definicja

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.

Dotyczy

Zobacz też