AsyncBase 類別
實作 Windows 執行階段非同步狀態機器。
語法
template <
typename TComplete,
typename TProgress = Details::Nil,
AsyncResultType resultType = SingleResult
>
class AsyncBase : public AsyncBase<TComplete, Details::Nil, resultType>;
template <typename TComplete, AsyncResultType resultType>
class AsyncBase<TComplete, Details::Nil, resultType> :
public Microsoft::WRL::Implements<IAsyncInfo>;
參數
TComplete
非同步作業完成時所呼叫的事件處理常式。
TProgress
當執行中的非同步作業報告作業的目前進度時所呼叫的事件處理常式。
resultType
其中 一個 AsyncResultType 列舉值。 根據預設, SingleResult
為 。
成員
公用建構函式
名稱 | 描述 |
---|---|
AsyncBase::AsyncBase | 初始化 AsyncBase 類別的執行個體。 |
公用方法
名稱 | 描述 |
---|---|
AsyncBase::Cancel | 取消非同步作業。 |
AsyncBase::Close | 關閉非同步作業。 |
AsyncBase::FireCompletion | 叫用完成事件處理常式,或重設內部進度委派。 |
AsyncBase::FireProgress | 叫用目前的進度事件處理常式。 |
AsyncBase::get_ErrorCode | 擷取目前非同步作業的錯誤碼。 |
AsyncBase::get_Id | 擷取非同步作業的控制碼。 |
AsyncBase::get_Status | 擷取值,指出非同步作業的狀態。 |
AsyncBase::GetOnComplete | 將目前完成事件處理常式的位址複製到指定的變數。 |
AsyncBase::GetOnProgress | 將目前進度事件處理常式的位址複製到指定的變數。 |
AsyncBase::p ut_Id | 設定非同步作業的控制碼。 |
AsyncBase::P utOnComplete | 將完成事件處理常式的位址設定為指定的值。 |
AsyncBase::P utOnProgress | 將進度事件處理常式的位址設定為指定的值。 |
受保護的方法
名稱 | 描述 |
---|---|
AsyncBase::CheckValidStateForDelegateCall | 測試委派屬性是否可以在目前的非同步狀態中修改。 |
AsyncBase::CheckValidStateForResultsCall | 測試非同步作業的結果是否可以以目前非同步狀態收集。 |
AsyncBase::ContinueAsyncOperation | 判斷非同步作業應該繼續處理,還是應該停止。 |
AsyncBase::CurrentStatus | 擷取目前非同步作業的狀態。 |
AsyncBase::ErrorCode | 擷取目前非同步作業的錯誤碼。 |
AsyncBase::OnCancel | 在衍生類別中覆寫時,取消非同步的 作業。 |
AsyncBase::OnClose | 在衍生類別中覆寫時,關閉非同步作業。 |
AsyncBase::OnStart | 在衍生類別中覆寫時,啟動非同步作業。 |
AsyncBase::Start | 啟動非同步作業。 |
AsyncBase::TryTransitionToCompleted | 指出目前的非同步作業是否已完成。 |
AsyncBase::TryTransitionToError | 指出指定的錯誤碼是否可以修改內部錯誤狀態。 |
繼承階層架構
AsyncBase
AsyncBase
需求
標頭: async.h
命名空間: Microsoft::WRL
AsyncBase::AsyncBase
初始化 AsyncBase
類別的執行個體。
AsyncBase();
AsyncBase::Cancel
取消非同步作業。
STDMETHOD(
Cancel
)(void);
傳回值
根據預設,一律會傳回S_OK。
備註
Cancel()
是 的預設實作 IAsyncInfo::Cancel
,而且不會執行實際工作。 若要實際取消非同步作業,請覆寫 OnCancel()
純虛擬方法。
AsyncBase::CheckValidStateForDelegateCall
測試委派屬性是否可以在目前的非同步狀態中修改。
inline HRESULT CheckValidStateForDelegateCall();
傳回值
如果可以修改委派屬性,S_OK;否則,E_ILLEGAL_METHOD_CALL。
AsyncBase::CheckValidStateForResultsCall
測試非同步作業的結果是否可以以目前非同步狀態收集。
inline HRESULT CheckValidStateForResultsCall();
傳回值
如果可以收集結果,S_OK;否則,E_ILLEGAL_METHOD_CALLE_ILLEGAL_METHOD_CALL。
AsyncBase::Close
關閉非同步作業。
STDMETHOD(
Close
)(void) override;
傳回值
如果作業關閉或已經關閉,S_OK;否則,E_ILLEGAL_STATE_CHANGE。
備註
Close()
是 的預設實作 IAsyncInfo::Close
,而且不會執行實際工作。 若要實際關閉非同步作業,請覆寫 OnClose()
純虛擬方法。
AsyncBase::ContinueAsyncOperation
判斷非同步作業應該繼續處理,還是應該停止。
inline bool ContinueAsyncOperation();
傳回值
true
如果非同步作業的目前狀態已 啟動,表示作業應該繼續。 否則, false
這表示作業應該停止。
AsyncBase::CurrentStatus
擷取目前非同步作業的狀態。
inline void CurrentStatus(
Details::AsyncStatusInternal *status
);
參數
status
此作業儲存目前狀態的位置。
備註
此作業是安全線程的。
AsyncBase::ErrorCode
擷取目前非同步作業的錯誤碼。
inline void ErrorCode(
HRESULT *error
);
參數
錯誤
此作業儲存目前錯誤碼的位置。
備註
此作業是安全線程的。
AsyncBase::FireCompletion
叫用完成事件處理常式,或重設內部進度委派。
void FireCompletion(
void
) override;
virtual void FireCompletion();
備註
的第一個版本 FireCompletion()
會重設內部進度委派變數。 如果非同步作業完成,第二個版本會叫用完成事件處理常式。
AsyncBase::FireProgress
叫用目前的進度事件處理常式。
void FireProgress(
const typename ProgressTraits::Arg2Type arg
);
參數
arg
要叫用的事件處理常式方法。
備註
ProgressTraits
衍生自 ArgTraitsHelper 結構 。
AsyncBase::get_ErrorCode
擷取目前非同步作業的錯誤碼。
STDMETHOD(
get_ErrorCode
)(HRESULT* errorCode) override;
參數
errorCode
儲存目前錯誤碼的位置。
傳回值
如果成功,S_OK;否則,如果目前的非同步作業已關閉,E_ILLEGAL_METHOD_CALL。
AsyncBase::get_Id
擷取非同步作業的控制碼。
STDMETHOD(
get_Id
)(unsigned int *id) override;
參數
id
要儲存控制碼的位置。
傳回值
如果成功,S_OK;否則,E_ILLEGAL_METHOD_CALL。
備註
這個方法會實作 IAsyncInfo::get_Id
。
AsyncBase::get_Status
擷取值,指出非同步作業的狀態。
STDMETHOD(
get_Status
)(AsyncStatus *status) override;
參數
status
要儲存狀態的位置。 如需詳細資訊,請參閱 Windows::Foundation::AsyncStatus
列舉。
傳回值
如果成功,S_OK;否則,E_ILLEGAL_METHOD_CALL。
備註
這個方法會實作 IAsyncInfo::get_Status
。
AsyncBase::GetOnComplete
將目前完成事件處理常式的位址複製到指定的變數。
STDMETHOD(
GetOnComplete
)(TComplete** completeHandler);
參數
completeHandler
儲存目前完成事件處理常式位址的位置。
傳回值
如果成功,S_OK;否則,E_ILLEGAL_METHOD_CALL。
AsyncBase::GetOnProgress
將目前進度事件處理常式的位址複製到指定的變數。
STDMETHOD(
GetOnProgress
)(TProgress** progressHandler);
參數
progressHandler
儲存目前進度事件處理常式位址的位置。
傳回值
如果成功,S_OK;否則,E_ILLEGAL_METHOD_CALL。
AsyncBase::OnCancel
在衍生類別中覆寫時,取消非同步的 作業。
virtual void OnCancel(
void
) = 0;
AsyncBase::OnClose
在衍生類別中覆寫時,關閉非同步作業。
virtual void OnClose(
void
) = 0;
AsyncBase::OnStart
在衍生類別中覆寫時,啟動非同步作業。
virtual HRESULT OnStart(
void
) = 0;
AsyncBase::p ut_Id
設定非同步作業的控制碼。
STDMETHOD(
put_Id
)(const unsigned int id);
參數
id
非零控點。
傳回值
如果成功,S_OK;否則,E_INVALIDARG或E_ILLEGAL_METHOD_CALL。
AsyncBase::P utOnComplete
將完成事件處理常式的位址設定為指定的值。
STDMETHOD(
PutOnComplete
)(TComplete* completeHandler);
參數
completeHandler
完成事件處理常式所設定的位址。
傳回值
如果成功,S_OK;否則,E_ILLEGAL_METHOD_CALL。
AsyncBase::P utOnProgress
將進度事件處理常式的位址設定為指定的值。
STDMETHOD(
PutOnProgress
)(TProgress* progressHandler);
參數
progressHandler
進度事件處理常式設定的位址。
傳回值
如果成功,S_OK;否則,E_ILLEGAL_METHOD_CALL。
AsyncBase::Start
啟動非同步作業。
STDMETHOD(
Start
)(void);
傳回值
如果作業啟動或已啟動,S_OK;否則,E_ILLEGAL_STATE_CHANGE。
備註
Start()
是受保護的方法,因為非同步作業在返回呼叫端之前「經常啟動」,因此無法從外部看見。
AsyncBase::TryTransitionToCompleted
指出目前的非同步作業是否已完成。
bool TryTransitionToCompleted(
void
);
傳回值
true
如果非同步作業已完成,則為 ;否則為 false
。
AsyncBase::TryTransitionToError
指出指定的錯誤碼是否可以修改內部錯誤狀態。
bool TryTransitionToError(
const HRESULT error
);
參數
錯誤
錯誤 HRESULT。
傳回值
true
如果內部錯誤狀態已變更,則為 ;否則為 false
。
備註
只有當錯誤狀態已設定為 S_OK時,此作業才會修改錯誤狀態。 如果錯誤狀態已經錯誤、已取消、已完成或已關閉,此作業就沒有作用。
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: