Share via


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