共用方式為


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如果 IsInvalidIsClosed 屬性為 true,則不會呼叫 方法。 在您的 CriticalHandle 衍生類別中實作這個方法,以執行釋放句柄所需的任何程序代碼。 因為的其中一個功能 CriticalHandle 是保證資源外洩,所以 實 ReleaseHandle 作中的程式代碼絕對不能失敗。 在一般完成項執行一般完成項之後,垃圾收集行程 ReleaseHandle 會呼叫同時收集的物件,並保證資源叫用它,而且在進行中時不會中斷。 這個方法將會在實例建構時間 (以及其靜態可判斷呼叫圖形中的所有方法,準備為條件約束的執行區域 (CER) ) 。 雖然這可防止線程中止中斷,但您仍然必須小心不要在覆寫 ReleaseHandle 的 方法中導入任何錯誤路徑。 特別是,將 ReliabilityContractAttribute 屬性套用至您從 ReleaseHandle呼叫的任何方法。 在大部分情況下,此程式代碼應該是:

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

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

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

適用於

另請參閱