IAsyncActionWithProgress<TProgress> 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示可以向调用方报告进度更新的异步操作。 这是所有没有结果对象的Windows 运行时异步方法的返回类型,但向回调侦听器报告进度。
public interface class IAsyncActionWithProgress : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(527282776, 59395, 18593, 149, 70, 235, 115, 83, 57, 136, 132)]
template <typename TProgress>
struct IAsyncActionWithProgress : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(527282776, 59395, 18593, 149, 70, 235, 115, 83, 57, 136, 132)]
public interface IAsyncActionWithProgress<TProgress> : IAsyncInfo
Public Interface IAsyncActionWithProgress(Of TProgress)
Implements IAsyncInfo
类型参数
- TProgress
- 属性
- 实现
Windows 要求
设备系列 |
Windows 10 (在 10.0.10240.0 中引入)
|
API contract |
Windows.Foundation.FoundationContract (在 v1.0 中引入)
|
示例
有关说明如何处理 Progress 事件的示例 C++/WinRT 代码,请参阅异步操作和操作的委托类型。
注解
IAsyncActionWithProgress<TProgress> 是所有不传达结果对象的Windows 运行时异步方法的返回类型,但使应用能够检查操作进度。 这些方法中没有使用 IAsyncAction 的方法那样多。 IAsyncAction API 不报告进度,也没有结果。
在应用代码中使用返回 IAsyncActionWithProgress<TProgress> 的方法时,通常不会直接访问 IAsyncAction 返回值。 这是因为你几乎总是使用特定于语言的可等待语法。 在这种情况下,方法的明显返回值为 void。 有关详细信息,请参阅异步编程,或Windows 运行时异步编程 (调用 C# 或 Visual Basic、C++、JavaScript) 异步 API 的特定于语言的指南之一。
即使不使用特定于语言的可等待语法,直接使用 IAsyncActionWithProgress<TProgress> 也不常见。 每种语言都有一些扩展点,通常比Windows 运行时接口更易于使用。 JavaScript 具有 WinJS.Promise 和 then/donewith onProgress 语法。 .NET 具有 AsTask 扩展方法,将 IAsyncActionWithProgress<TProgress> 转换为 Task 后,可以更轻松地取消、在完成时获取通知、使用 IProgress<T> 等。 对于 C++/CX,可以使用 并发运行时 (包装调用,并使用 create_task) 。 换句话说,IAsyncActionWithProgress<TProgress> 可视为运行时级基础结构,每个语言都将其用作框架,以自己的方式支持可等待的语法或异步编程模型。
具体而言,如果要在 .NET 代码中处理进度,请使用在扩展用法中具有单个 IProgress 引用参数的 AsTask 签名。 (在此用法中,进度单元已受约束,并且与正在使用的 IAsyncActionWithProgress 方法匹配。) 提供实现 IProgress 的对象,并且每次Windows 运行时方法报告进度通知时都会调用 Report 方法实现。
若要监视操作的进度 (不使用上述特定于语言的技术) ,请设置 Progress 属性,为其提供实现 AsyncActionProgressHandler<TProgress> 委托的方法的名称。
C++/WinRT 扩展函数
注意
某些Windows 运行时 API 的 C++/WinRT 投影类型上存在扩展函数。 例如, winrt::Windows::Foundation::IAsyncAction 是 IAsyncAction 的 C++/WinRT 投影类型。 扩展函数不是应用程序二进制接口的一部分, (ABI) 实际Windows 运行时类型的图面,因此它们不会列为Windows 运行时 API 的成员。 但可以从任何 C++/WinRT 项目中调用它们。 请参阅扩展Windows 运行时 API 的 C++/WinRT 函数。
void get() const;
同步等待操作完成。 如果操作被取消或进入错误状态,则引发相应的异常。 不得从单线程单元调用它。 有关详细信息以及显示如何调用 get 的代码示例,请参阅 编写协同例程。
AsyncStatus wait_for(TimeSpan const& timeout) const;
同步等待操作完成,或等待指定的超时。 如果超时已过,则返回 IAsyncActionWithProgress 或 AsyncStatus::Started 的状态。 如果操作未超时,则调用 GetResults 以获取操作的结果。 有关详细信息,以及显示如何调用 wait_for的代码示例,请参阅 简化异步超时。
接口继承
IAsyncActionWithProgress<TProgress> 继承 IAsyncInfo。实现 IAsyncActionWithProgress<TProgress> 的类型也实现 IAsyncInfo 的接口成员:
实施者说明
与调用现有方法一样,可通过特定于语言的方法定义不使用 IAsyncActionWithProgress<TProgress> 的异步方法。 如果使用 .NET 编写代码,方法可以返回 Task。 对于 C++/CX,可以使用 并发运行时。 但是,如果要定义组件,则可以在内部使用 Task/任务,但必须为公共方法返回Windows 运行时接口之一。 特定于语言的异步支持类型 (,以及通常在代码) 中使用的许多其他特定于语言的类型不能用于Windows 运行时组件的公共外围应用。
属性
Completed |
获取或设置在操作完成时调用的委托。 |
ErrorCode |
获取描述异步操作的错误条件的字符串。 (继承自 IAsyncInfo) |
Id |
获取异步操作的句柄。 (继承自 IAsyncInfo) |
Progress |
获取或设置接收进度通知的回调方法。 |
Status |
获取一个值,该值指示异步操作的状态。 (继承自 IAsyncInfo) |
方法
Cancel() |
取消异步操作。 (继承自 IAsyncInfo) |
Close() |
关闭异步操作。 (继承自 IAsyncInfo) |
GetResults() |
返回操作的结果。 |