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 时,此操作才会修改错误状态。 如果错误状态已出错、已取消、已完成或关闭,则此操作无效。