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時,此作業才會修改錯誤狀態。 如果錯誤狀態已經錯誤、已取消、已完成或已關閉,此作業就沒有作用。