SafeHandle.ReleaseHandle 方法

定義

在衍生類別中覆寫時,執行釋放控制代碼所需的程式碼。

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

傳回

如果成功釋放控制代碼,則為 true;如果發生嚴重失敗的事件,則為 false。 在這種情況下,它會產生 releaseHandleFailed Managed 偵錯助理。

範例

下列程式碼範例會釋放控制碼,而且是類別所提供較大範例的 SafeHandle 一部分。

[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.
}

備註

只有在 ReleaseHandle 屬性所 IsInvalid 定義的控制碼有效時,方法才保證只能呼叫一次。 在您的衍生類別中實作 SafeHandle 這個方法,以執行釋放控制碼所需的任何程式碼。 因為 的其中一個函式 SafeHandle 是保證資源外泄,所以 實 ReleaseHandle 作中的程式碼絕對不能失敗。 在一般完成項之後,垃圾收集行程會針對 ReleaseHandle 同時收集垃圾的物件執行垃圾收集行程呼叫。 垃圾收集行程保證資源會叫用這個方法,而且方法在進行中時不會中斷。

此外,如需簡單的清除 (,請在檔案控制碼上呼叫 Windows API CloseHandle) 您可以檢查單一平台叫用呼叫的傳回值。 針對複雜的清除,您可能會有許多程式邏輯和許多方法呼叫,其中有些可能會失敗。 您必須確定程式邏輯具有每個案例的後援程式碼。

如果 ReleaseHandle 基於任何原因傳 false 回 ,它會在 .NET Framework 上執行時產生releaseHandleFailed Managed 偵錯小幫手。 這有助於偵測嘗試釋放資源失敗的情況。

適用於

另請參閱