共用方式為


IClosable 介面 (windows.foundation.h)

定義釋放已配置資源的方法。

繼承

IClosable 介面繼承自 IInspectable 介面。 IClosable 也有下列類型的成員:

方法

IClosable 介面具有這些方法。

 
IClosable::Close

執行與釋放、釋放或重設已配置資源相關聯的應用程式定義工作。

備註

使用 IClosable 介面來管理系統資源的存留期,例如 Windows 執行階段 物件所使用的檔句柄和網路套接字。

某些系統資源是由單一程式代碼獨佔使用,而且必須先釋放,其他程式代碼才能使用這些資源。 例如,開啟檔案進行讀取/寫入存取可防止其他程式代碼開啟相同的檔案以進行讀取/寫入存取,因此開啟檔案的程式代碼必須關閉檔句柄,才能開啟其他程序代碼。

其他系統資源不是獨佔用途。 許多硬體裝置,例如感測器、地理位置、SMS 和可攜式裝置,可以在相同應用程式內或由多個應用程式開啟多次。

IClosable 介面可讓您管理獨佔使用的系統資源。 當您在 Windows 執行階段 物件上呼叫 Close 方法時,對象會釋放其系統資源,讓其他程式代碼可以使用它們。 只使用共用系統資源的物件,例如記憶體和可共用裝置,不會實作 IClosable

當您在 Windows 執行階段 物件中實作 Close 方法時,您的程式代碼必須釋放它保留的所有獨佔使用資源。 如果物件具有其他可關閉 Windows 執行階段 對象的參考,則必須先在物件上呼叫 Close,才能釋放物件。 此外,您的程式代碼必須釋放其他資源,例如參考其他 Windows 執行階段 和元件物件模型, (COM) 物件,以及記憶體緩衝區等非獨佔系統資源。

在物件上呼叫 Close 方法會讓物件保留在記憶體中,但物件不再具有它需要正常運作的系統資源。 相依於已發行系統資源的成員必須傳回 RO_E_CLOSED ,以指出物件已關閉,而且這些成員不再運作。

IUnknownIInspectable 介面所定義的方法必須在呼叫 Close 之後繼續正常運作。

在已經關閉的物件上呼叫 Close 沒有任何作用,並傳回 S_OK

通常,您的物件會在呼叫 Close 時設定布爾值旗標,或檢查保留的資源是否有 Null 或其他 sentinel 值,來追蹤其關閉狀態。

物件不需要同步存取 Close 方法。 這表示可能會有一個線程在物件上呼叫 Close ,而另一個線程正在使用物件。 在此情況下,可能會收到 RO_E_CLOSED以外的錯誤,但您必須確定物件不會造成存取違規。

在等候異步操作完成時, Close 方法不會封鎖。 因此當 Close 方法傳回時,基礎系統資源可能無法完全釋放。 為了確保確定關閉具決定性,呼叫端必須等候所有異步操作完成或取消。 對象必須在面對未完成的異步操作時儘快釋放其系統資源,但在等候這些作業完成時,不得封鎖。

如果您的可關閉 Windows 執行階段 物件向其他對象公開獨佔使用資源,它必須提供一種方式,以影響它所保存之任何可關閉對象的擁有權語意。 例如, DataReader 類別會提供 DetachStream 方法,以傳回它在建立時收到的 IInputStream 。 呼叫 DetachStream 時,DataReader 不再是 IInputStream 的擁有者,因此 DataReader 不會在 IInputStream 上呼叫 Close

規格需求

需求
最低支援的用戶端 Windows 8
最低支援的伺服器 Windows Server 2012
目標平台 Windows
標頭 windows.foundation.h