IAsyncOperationWithProgress<TResult,TProgress> 介面

定義

表示可以向呼叫端報告進度更新的異步操作。 這是許多 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。 未報告進度 (但有結果的 API) 使用另一個介面 IAsyncOperation<TResult>。

當您在應用程式程序代碼中使用傳回 IAsyncOperationWithProgress<TResult,TProgress> (與 TResult 特定條件約束的方法) 時,您通常不會直接存取 IAsyncOperationWithProgress 傳回值。 這是因為您幾乎一律使用特定語言的可等候語法。 在此情況下,方法的明顯傳回值是提供做為 TResult 參數的類型。 如需詳細資訊,請參閱異步程序設計或其中一個特定語言指南,以 Windows 執行階段 異步程序設計 (在 C# 或 Visual BasicC++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 程式代碼中的進度,請使用擴充功能使用方式中有單一 IProgress 參考參數的 AsTask 簽章。 (在此用法中,進度單位已經受到限制,且符合您正在使用的IAsyncOperationWithProgress方法。) 提供實作 IProgress 的物件,而且每次 Windows 執行階段 方法報告進度通知時,都會叫用您的 Report 方法實作。

若要監視動作的進度, (如果未使用上述語言特定技術) ,請設定 Progress 屬性,並提供實作 AsyncOperationProgressHandler<TResult,TProgress> 委派的方法名稱。

C++/WinRT 延伸模組函式

注意

擴充功能函式存在於特定 Windows 執行階段 API 的 C++/WinRT 投影類型上。 例如, winrt::Windows::Foundation::IAsyncActionIAsyncAction 的 C++/WinRT 投影類型。 延伸模組函式不是應用程式二進位介面的一部分, (ABI) 實際 Windows 執行階段 型別的介面,因此它們不會列為 Windows 執行階段 API 的成員。 但您可以從任何 C++/WinRT 專案內呼叫它們。 請參閱擴充 Windows 執行階段 API 的 C++/WinRT 函式。

TResult get() const;

以同步方式等候作業完成,並傳回已完成的值。 如果作業已取消,或進入錯誤狀態,則會擲回對應的例外狀況。 您不得從單個線程 Apartment 呼叫它。 如需詳細資訊,以及示範如何呼叫 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()

傳回作業的結果。

適用於

另請參閱