CriticalHandle.ReleaseHandle 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
在衍生類別中覆寫時,執行釋放控制代碼所需的程式碼。
protected:
abstract bool ReleaseHandle();
protected abstract bool ReleaseHandle ();
abstract member ReleaseHandle : unit -> bool
Protected MustOverride Function ReleaseHandle () As Boolean
傳回
如果成功釋放控制代碼,則為 true
;如果發生嚴重失敗的事件,則為 false
。 在這種情況下,它會產生 releaseHandleFailed Managed 偵錯助理。
備註
ReleaseHandle方法保證只會呼叫一次,前提是您採用適當的同步處理機制,以確保只會呼叫 Close 或 Dispose 方法。 ReleaseHandle如果 或 IsClosed 屬性為 true
, IsInvalid 則不會呼叫 方法。 在您的衍生類別中實作 CriticalHandle 這個方法,以執行釋放控制碼所需的任何程式碼。 因為 的其中一個函式 CriticalHandle 是保證資源外泄,所以 實 ReleaseHandle 作中的程式碼絕對不能失敗。 在一般完成項執行之後,垃圾收集行程 ReleaseHandle 會呼叫同時收集垃圾的物件,並保證資源在進行中時不會中斷。 這個方法會準備為實例建構 (時間 (CER) 的限制執列區域,以及其靜態可判斷呼叫圖形中的所有方法) 。 雖然這可防止執行緒中止中斷,但您仍然必須小心不要在覆 ReleaseHandle 寫的方法中導入任何錯誤路徑。 特別是,將 ReliabilityContractAttribute 屬性套用至您從 ReleaseHandle 呼叫的任何方法。 在大部分情況下,此程式碼應該是:
ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)
此外,如需簡單的清除 (,請在檔案控制碼上呼叫 Windows API CloseHandle
) 您可以檢查單一平台叫用呼叫的傳回值。 針對複雜的清除,您可能會有許多程式邏輯和許多方法呼叫,其中有些可能會失敗。 您必須確定程式邏輯具有每個案例的後援程式碼。
ReleaseHandle如果方法因任何原因而傳回 false
,它會產生releaseHandleFailed Managed 偵錯小幫手。
適用於
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應