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::put_Id 设置异步操作的句柄。
AsyncBase::PutOnComplete 将完成事件处理程序的地址设置为指定值。
AsyncBase::PutOnProgress 将进度事件处理程序的地址设置为指定值。

受保护方法

名称 描述
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
);

参数

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::put_Id

设置异步操作的句柄。

STDMETHOD(
   put_Id
)(const unsigned int id);

参数

id
非零句柄。

返回值

如果成功,返回值为 S_OK;否则为 E_INVALIDARG 或 E_ILLEGAL_METHOD_CALL。

AsyncBase::PutOnComplete

将完成事件处理程序的地址设置为指定值。

STDMETHOD(
   PutOnComplete
)(TComplete* completeHandler);

参数

completeHandler
完成事件处理程序所设置的地址。

返回值

如果成功,返回值为 S_OK;否则为 E_ILLEGAL_METHOD_CALL。

AsyncBase::PutOnProgress

将进度事件处理程序的地址设置为指定值。

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
);

参数

error
错误 HRESULT。

返回值

如果更改了内部错误状态,返回值为 true,否则为 false

备注

仅当错误状态已设置为 S_OK 时,此操作才会修改错误状态。 如果错误状态已出错、已取消、已完成或关闭,则此操作无效。