IWbemServices::CancelAsyncCall 方法 (wbemcli.h)

IWbemServices::CancelAsyncCall 方法會根據原本傳遞至異步方法的 IWbemObjectSink 指標,取消任何目前擱置中的異步呼叫。 未處理的 IWbemObjectSink 指標可以在呼叫之前或呼叫傳回之後釋出。 CancelAsyncCall 方法無法從接收內運作,而且方法提供者不支援此方法。 這表示只會取消呼叫的用戶端端。 實作提供者不會收到呼叫已取消並執行至完成的通知。 您應該在取消需要很長時間才能完成的方法,例如Win32_Volume 類別中的DefragFormat 方法。

語法

HRESULT CancelAsyncCall(
  [in] IWbemObjectSink *pSink
);

參數

[in] pSink

用戶端提供給 IWbemServices 的任何異步方法的 IWbemObjectSink 實作指標。

傳回值

這個方法會傳回 HRESULT ,指出方法呼叫的狀態。 下列清單列出 HRESULT 中包含的值。

失敗時,您可以從 COM 函式 GetErrorInfo 取得可用的資訊。

如果網路問題造成您遺失與 Windows 管理的遠端連線,也可以傳回 COM 特定的錯誤碼。

注意如果 WMI 處理 CancelAsyncCall 時未在應用程式的接收上呼叫 SetStatus,WMI 會在該接收上呼叫 SetStatus,並將 WBEM_E_CALL_CANCELLED 作為 hResult 參數的值。
 
計時和異步操作的本質可能會影響 WMI 是否能夠取消作業。 只有在完成查詢之前,才會成功取消冗長的查詢。 更快速的作業,例如異步刪除或修改,通常必須先完成,WMI 才能處理 CancelAsyncCall 呼叫。 因此,雖然 CancelAsyncCall 嘗試取消目前的作業,但有時候可以完成的所有動作都是釋放 IWbemObjectSink 指標。
注意 您可以使用相同的物件接收進行許多異步呼叫。 在此情況下, CancelAsyncCall 方法會取消共用此物件接收的所有異步呼叫。 強烈建議您為每個未完成的異步呼叫建立物件接收的一個實例。
 

備註

由於對接收的回呼可能不會在用戶端所需的相同驗證層級傳回,因此建議您使用半同步而非異步通訊。 如需詳細資訊,請參閱 呼叫方法。 從 IWbemObjectSink::IndicateIWbemObjectSink::SetStatus 的實作內呼叫 CancelAsyncCall 可能會干擾 WMI 狀態,不建議這麼做。

ExecMethodAsync 之類的方法呼叫案例中,只會取消呼叫的用戶端。 實作提供者不會收到呼叫已取消並執行至完成的通知。

如需如何使用異步呼叫的詳細資訊,請參閱 使用 C++ 進行異步呼叫接收異步事件通知

範例

如需使用 CancelAsyncCall 的完整範例,請參閱 範例:透過 WMI 接收事件通知

下列 C++ 範例取自 \\Program Files\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\wmi\vc\decoupled\instance_provider 範例,示範 CancelAsyncCall 的實作。
HRESULT CProvider_IWbemServices :: CancelAsyncCall ( 
  
 IWbemObjectSink *a_Sink
)
{
 HRESULT t_Result = WBEM_E_NOT_AVAILABLE ;
 return t_Result ;
}

規格需求

需求
最低支援的用戶端 Windows Vista
最低支援的伺服器 Windows Server 2008
目標平台 Windows
標頭 wbemcli.h (包含 Wbemidl.h)
程式庫 Wbemuuid.lib
Dll Fastprox.dll;Esscli.dll;FrameDyn.dll;FrameDynOS.dll;Ntevt.dll;Stdprov.dll;Viewprov.dll;Wbemcomn.dll;Wbemcore.dll;Wbemess.dll;Wbemsvc.dll;Wmipicmp.dll;Wmidcprv.dll;Wmipjobj.dll;Wmiprvsd.dll

另請參閱

IWbemObjectSink

IWbemServices