Information
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

IAsyncOperationWithProgress<TResult, TProgress> interface

Represents an asynchronous operation that can report progress updates to callers. This is the return type for many Windows Runtime asynchronous methods that have results and also report progress.

Syntax


public interface IAsyncOperationWithProgress<TResult, TProgress> : IAsyncInfo

Type parameters

TResult

The type of the result.

TProgress

The type of the progress data.

Members

The IAsyncOperationWithProgress interface has these types of members:

Methods

The IAsyncOperationWithProgress interface has these methods. It also inherits methods from the Object class.

MethodDescription
GetResults Returns the results of the operation.

 

Properties

The IAsyncOperationWithProgress interface has these properties.

PropertyAccess typeDescription

Completed

Read/writeGets or sets the method that handles the operation completed notification.

Progress

Read/writeGets or sets the method that handles progress notifications.

 

Remarks

IAsyncOperationWithProgress<TResult,TProgress> is the return type for many Windows Runtime asynchronous methods that have a result upon completion, and also support notifications that report progress (which callers can subscribe to by assigning a callback for Progress). This constitutes about 100 different Windows Runtime APIs. APIs that don't report progress (but do have a result) use another interface, IAsyncOperation<TResult>.

When you use methods that return IAsyncOperationWithProgress<TResult,TProgress> (with a TResult specific constraint) in your app code, you usually don't access the IAsyncOperationWithProgress return value directly. That's because you almost always use the language-specific awaitable syntax. In this case, the apparent return value of the method is the type provided as the TResult parameter. For more info, see Asynchronous programming, or one of the language-specific guides to Windows Runtime asynchronous programming (Call asynchronous APIs in C# or Visual Basic, C++, JavaScript).

It's not common to use IAsyncOperationWithProgress<TResult,TProgress> directly even if you don't use a language-specific awaitable syntax. Each of the languages has extension points that are generally easier to use than the Windows Runtime interface. JavaScript has WinJS.Promise, and the then/done syntax. .NET has the AsTask extension method, and once the IAsyncOperationWithProgress<TResult,TProgress> is converted to a Task<TResult>, it's easier to get the result, cancel, get notification on completion, and so on. For C++/CX, you can wrap the calls using the Concurrency runtime (and use create_task). In other words, IAsyncOperationWithProgress<TResult,TProgress> can be considered runtime-level infrastructure, which each of the languages use as a framework to support awaitable syntax or asynchronous programming models in their own way.

Specifically, if you want to handle progress in .NET code, use the AsTask signature that in an extension usage has a single IProgress reference parameter. (In this usage, the progress unit is already constrained and matches the IAsyncOperationWithProgress method you're using.) Provide an object that implements IProgress, and your Report method implementation is invoked each time the Windows Runtime method reports a progress notification.

To monitor the progress of the action (if not using the language-specific techniques described above), set the Progress property, providing it the name of a method that implements the AsyncOperationProgressHandler<TResult,TProgress> delegate.

Interface inheritance

IAsyncOperationWithProgress<TResult,TProgress> inherits IAsyncInfo. Types that implement IAsyncOperationWithProgress<TResult,TProgress> also implement the interface members of IAsyncInfo:

Notes to implementers

As with calling the existing methods, there are language-specific ways to define asynchronous methods that don't use IAsyncOperationWithProgress<TResult,TProgress> directly. If writing code using .NET, your method can return a Task<TResult>. For C++/CX, you can use the Concurrency runtime. However, if you're defining a Windows Runtime component, you can use Task/task internally but you must return one of the Windows Runtime interfaces for your public methods. The language-specific asynchronous support types (and many other language-specific types you might conventionally use in code) can't be used for the public surface area of a Windows Runtime component.

Requirements (Windows 10 device family)

Device family

Universal

API contract

Windows.Foundation.FoundationContract, introduced version 1.0

Namespace

Windows.Foundation
Windows::Foundation [C++]

Metadata

Windows.Foundation.FoundationContract.winmd

Requirements (Windows 8.x and Windows Phone 8.x)

Minimum supported client

Windows 8

Minimum supported server

Windows Server 2012

Minimum supported phone

Windows Phone 8

Namespace

Windows.Foundation
Windows::Foundation [C++]

Metadata

Windows.winmd

Attributes

[Version(0x06020000)]

See also

IAsyncInfo
IAsyncOperation<TResult>
Asynchronous programming

 

 

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2015 Microsoft