分享方式:


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