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