CriticalHandle.ReleaseHandle 方法

定義

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

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

傳回

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

備註

ReleaseHandle方法保證只會呼叫一次,前提是您採用適當的同步處理機制,以確保只會呼叫 CloseDispose 方法。 ReleaseHandle如果 或 IsClosed 屬性為 trueIsInvalid 則不會呼叫 方法。 在您的衍生類別中實作 CriticalHandle 這個方法,以執行釋放控制碼所需的任何程式碼。 因為 的其中一個函式 CriticalHandle 是保證資源外泄,所以 實 ReleaseHandle 作中的程式碼絕對不能失敗。 在一般完成項執行之後,垃圾收集行程 ReleaseHandle 會呼叫同時收集垃圾的物件,並保證資源在進行中時不會中斷。 這個方法會準備為實例建構 (時間 (CER) 的限制執列區域,以及其靜態可判斷呼叫圖形中的所有方法) 。 雖然這可防止執行緒中止中斷,但您仍然必須小心不要在覆 ReleaseHandle 寫的方法中導入任何錯誤路徑。 特別是,將 ReliabilityContractAttribute 屬性套用至您從 ReleaseHandle 呼叫的任何方法。 在大部分情況下,此程式碼應該是:

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

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

ReleaseHandle如果方法因任何原因而傳回 false ,它會產生releaseHandleFailed Managed 偵錯小幫手。

適用於

另請參閱