AsyncOperationManager.CreateOperation メソッド
アセンブリ: System (system.dll 内)

Dim userSuppliedState As Object Dim returnValue As AsyncOperation returnValue = AsyncOperationManager.CreateOperation(userSuppliedState)
戻り値
非同期メソッドの呼び出しの存続期間を追跡するために使用できる AsyncOperation。

CreateOperation メソッドは、特定の非同期操作の存続期間を追跡して操作完了時にアプリケーション モデルに通知を行うために使用できる System.ComponentModel.AsyncOperation を返します。また、操作を終了せずに、進行状況の更新やインクリメントの結果をポストするためにも使用できます。System.ComponentModel.AsyncOperation は、これらの呼び出しをアプリケーション モデルの適切なスレッドまたはコンテキストに正しくマーシャリングします。
イベント ベースの非同期パターンをサポートするクラスを実装する場合、MethodNameAsync メソッドが呼び出されるたびに、クラスは CreateOperation を呼び出す必要があります。メソッドを呼び出すクライアント アプリケーションは、userSuppliedState パラメータを使用して各呼び出しを一意に識別できます。したがって、非同期操作の実行中に発生したイベントを区別できます。
![]() |
---|
クライアント コードは、userSuppliedState パラメータに一意の値を提供する必要があります。タスク ID が一意ではない場合、実装が進行状況やその他のイベントを誤って報告する可能性があります。コードによって、一意でないタスク ID が存在するかどうかをチェックし、このような ID が検出された場合は、System.ArgumentException をスローする必要があります。 |
コードは、CreateOperation によって返されるすべての System.ComponentModel.AsyncOperation を追跡し、基になる対応する非同期操作のオブジェクトを使用して、更新のポストと操作の終了を行う必要があります。この追跡は、System.ComponentModel.AsyncOperation をデリゲート間でパラメータとして渡すだけで簡単に行うことができます。より高度なデザインでは、クラスが System.ComponentModel.AsyncOperation オブジェクトのコレクションを維持し、タスクの起動時にオブジェクトを追加したり、タスクの完了時またはキャンセル時にオブジェクトを削除したりできます。この方法を使用すると、一意の userSuppliedState パラメータ値をチェックできます。また、複数の同時実行呼び出しをサポートするクラスを使用する場合には、この方法を使用する必要があります。

CreateOperation メソッドを使用して、非同期操作の存続期間を追跡するために使用する System.ComponentModel.AsyncOperation を作成するコード例を次に示します。このコード例は、AsyncOperationManager クラスのトピックで取り上げているコード例の一部分です。
import System.*; import System.Collections.*; import System.Collections.Specialized.*; import System.ComponentModel.*; import System.Threading.*;
' This method starts the asynchronous calculation. ' First, it checks the supplied task ID for uniqueness. ' If taskId is unique, it creates a new WorkerEventHandler ' and calls its BeginInvoke method to start the calculation. Public Overridable Sub CalculatePrimeAsync( _ ByVal numberToTest As Integer, _ ByVal taskId As Object) ' Create an AsyncOperation for taskId. Dim asyncOp As AsyncOperation = _ AsyncOperationManager.CreateOperation(taskId) ' Multiple threads will access the task dictionary, ' so it must be locked to serialize access. SyncLock userStateToLifetime.SyncRoot If userStateToLifetime.Contains(taskId) Then Throw New ArgumentException( _ "Task ID parameter must be unique", _ "taskId") End If userStateToLifetime(taskId) = asyncOp End SyncLock ' Start the asynchronous operation. workerDelegate = New WorkerEventHandler( _ AddressOf CalculateWorker) workerDelegate.BeginInvoke( _ numberToTest, _ asyncOp, _ completionMethodDelegate, _ Nothing, _ Nothing) End Sub
// This method starts the asynchronous calculation. // First, it checks the supplied task ID for uniqueness. // If taskId is unique, it creates a new WorkerEventHandler // and calls its BeginInvoke method to start the calculation. public virtual void CalculatePrimeAsync( int numberToTest, object taskId) { // Create an AsyncOperation for taskId. AsyncOperation asyncOp = AsyncOperationManager.CreateOperation(taskId); // Multiple threads will access the task dictionary, // so it must be locked to serialize access. lock (userStateToLifetime.SyncRoot) { if (userStateToLifetime.Contains(taskId)) { throw new ArgumentException( "Task ID parameter must be unique", "taskId"); } userStateToLifetime[taskId] = asyncOp; } // Start the asynchronous operation. workerDelegate = new WorkerEventHandler(CalculateWorker); workerDelegate.BeginInvoke( numberToTest, asyncOp, completionMethodDelegate, null, null); }
public void CalculatePrimeAsync(int numberToTest, Object taskId) { // State must be unique. AsyncOperation asyncOp = AsyncOperationManager.CreateOperation(taskId); synchronized (userStateToLifetime.get_SyncRoot()) { if (userStateToLifetime.Contains(taskId)) { throw new ArgumentException("Task ID parameter must be unique", "taskId"); } userStateToLifetime.set_Item(taskId, asyncOp); } // Start the asynchronous operation. workerDelegate = new WorkerEventHandler(CalculateWorker); workerDelegate.BeginInvoke(numberToTest, asyncOp, completionMethodDelegate, null, null); } //CalculatePrimeAsync
public void CalculatePrimeAsync(int numberToTest, Object taskId) { // State must be unique. AsyncOperation asyncOp = AsyncOperationManager.CreateOperation(taskId); synchronized (userStateToLifetime.get_SyncRoot()) { if (userStateToLifetime.Contains(taskId)) { throw new System.ArgumentException( "Task ID parameter must be unique", "taskId"); } userStateToLifetime.set_Item(taskId, asyncOp); } // Start the asynchronous operation. workerDelegate = new WorkerEventHandler(CalculateWorker); workerDelegate.BeginInvoke(numberToTest, asyncOp, completionMethodDelegate, null, null); } //CalculatePrimeAsync

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からAsyncOperationManager.CreateOperation メソッドを検索する場合は、下記のリンクをクリックしてください。

- AsyncOperationManager.CreateOperation メソッドのページへのリンク