次の方法で共有


IAsyncActionWithProgress<TProgress> インターフェイス

定義

進行状況の更新を呼び出し元に報告できる非同期アクションを表します。 これは、結果オブジェクトを持たないが、コールバック リスナーに進行状況を報告するすべての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 があり、onProgress 構文を使用して/完了します。 .NET には AsTask 拡張メソッドがあり、IAsyncActionWithProgress<TProgress TProgress> が Task に変換されると、キャンセル、完了時の通知の取得、 IProgress<T> の使用などが簡単になります。 C++/CX の場合は、 コンカレンシー ランタイム を使用して呼び出しをラップできます ( また、create_taskを使用します)。 言い換えると、IAsyncActionWithProgress<TProgress> はランタイム レベルのインフラストラクチャと見なすことができます。各言語では、待機可能な構文または非同期プログラミング モデルを独自の方法でサポートするためのフレームワークとして使用されます。

具体的には、.NET コードで進行状況を処理する場合は、拡張機能の使用時に 1 つの IProgress 参照パラメーターを持つ AsTask シグネチャを使用します。 (この使用法では、進行状況ユニットは既に制約されており、使用している IAsyncActionWithProgress メソッドと一致します)。IProgress を実装する オブジェクトを指定すると、Windows ランタイム メソッドが進行状況通知を報告するたびに Report メソッドの実装が呼び出されます。

アクションの進行状況を監視するには (上記の言語固有の手法を使用していない場合)、 Progress プロパティを設定し、 AsyncActionProgressHandler<TProgress> デリゲートを実装するメソッドの名前を指定します。

C++/WinRT 拡張機能関数

注意

拡張関数は、特定のWindows ランタイム API の C++/WinRT プロジェクション型に存在します。 たとえば、 winrt::Windows::Foundation::IAsyncAction、IAsyncAction の C++/WinRT プロジェクション型です。 拡張関数は、実際のWindows ランタイム型のアプリケーション バイナリ インターフェイス (ABI) サーフェスの一部ではないため、Windows ランタイム API のメンバーとして一覧表示されません。 ただし、任意の C++/WinRT プロジェクト内から呼び出すことができます。 API を拡張する C++/WinRT 関数Windows ランタイム参照してください

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 TProgress を直接使用しない非同期メソッドを定義する言語固有の<>方法があります。 .NET を使用してコードを記述する場合、メソッドは Task を返すことができます。 C++/CX の場合は、 コンカレンシー ランタイムを使用できます。 ただし、コンポーネントを定義する場合は、タスク/タスクを内部的に使用できますが、パブリック メソッドのWindows ランタイム インターフェイスのいずれかを返す必要があります。 言語固有の非同期サポート型 (およびコードで従来使用されるその他の多くの言語固有の型) は、Windows ランタイム コンポーネントのパブリック サーフェス領域には使用できません。

プロパティ

Completed

アクションの完了時に呼び出されるデリゲートを取得または設定します。

ErrorCode

非同期操作のエラー条件を表す文字列を取得します。

(継承元 IAsyncInfo)
Id

非同期操作のハンドルを取得します。

(継承元 IAsyncInfo)
Progress

進行状況通知を受信するコールバック メソッドを取得または設定します。

Status

非同期操作の状態を示す値を取得します。

(継承元 IAsyncInfo)

メソッド

Cancel()

非同期操作を取り消します。

(継承元 IAsyncInfo)
Close()

非同期操作を閉じます。

(継承元 IAsyncInfo)
GetResults()

アクションの結果を返します。

適用対象

こちらもご覧ください