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



Post メソッドは、非同期操作の有効期間を終了せずに、arg パラメータで指定されたデリゲートを呼び出します。
PostOperationCompleted の呼び出しによって非同期操作の有効期間が終了するまでは、Post メソッドを何度でも呼び出すことができます。このメソッドを使用して、クライアントに進行状況や暫定的な結果を報告できます。
d パラメータは、非同期タスクのステータスに関する更新をポストするときに呼び出す必要のあるデリゲートをラップします。AsyncOperation オブジェクトは、デリゲートがアプリケーション モデルに適したスレッドまたはコンテキストで確実に呼び出されるようにします。メソッドによって、ステータスの変更、進行状況の更新、または新たに使用できるインクリメントの結果をクライアントに通知するイベントを発生させることもできます。
arg パラメータを使用して、d パラメータによってラップされたデリゲートに状態を渡す必要があります。これは、AsyncOperation への参照の場合もあれば、System.ComponentModel.ProgressChangedEventArgs オブジェクトの場合もあります。System.ComponentModel.ProgressChangedEventArgs から独自のクラスを派生して、状態ストレージを追加することが必要な場合があります。
継承時の注意 継承側は、Post 呼び出しを非同期にする必要があります。これにより、クラス ライブラリ プロバイダが非同期を想定していても、特定のアプリケーション モデルで同期が発生する場合に、クラス ライブラリ プロバイダはスタック オーバーフローが発生する可能性を考慮する必要はなくなります。 非同期クラスの実装方法の詳細については、「イベントベースの非同期パターンの実装」を参照してください。
Post メソッドを使用して、非同期操作の進行状況およびインクリメントの結果を報告するコード例を次に示します。このコード例は、System.ComponentModel.AsyncOperationManager クラスのトピックで取り上げているコード例の一部分です。
import System.*; import System.Collections.*; import System.Collections.Specialized.*; import System.ComponentModel.*; import System.Threading.*;
' This method computes the list of prime numbers used by the ' IsPrime method. Private Function BuildPrimeNumberList( _ ByVal numberToTest As Integer, _ ByVal asyncOp As AsyncOperation) As ArrayList Dim e As ProgressChangedEventArgs = Nothing Dim primes As New ArrayList Dim firstDivisor As Integer Dim n As Integer = 5 ' Add the first prime numbers. primes.Add(2) primes.Add(3) ' Do the work. While n < numberToTest If IsPrime(primes, n, firstDivisor) Then ' Report to the client that you found a prime. e = New CalculatePrimeProgressChangedEventArgs( _ n, _ CSng(n) / CSng(numberToTest) * 100, _ asyncOp.UserSuppliedState) asyncOp.Post(Me.onProgressReportDelegate, e) primes.Add(n) ' Yield the rest of this time slice. Thread.Sleep(0) End If ' Skip even numbers. n += 2 ' No prime to report, so just use a ' ProgressChangedEventArgs object. e = New ProgressChangedEventArgs( _ CSng(n) / CSng(numberToTest) * 100, _ asyncOp.UserSuppliedState) asyncOp.Post(Me.onProgressReportDelegate, e) End While Return primes End Function
// This method computes the list of prime numbers used by the // IsPrime method. private ArrayList BuildPrimeNumberList( int numberToTest, AsyncOperation asyncOp) { ProgressChangedEventArgs e = null; ArrayList primes = new ArrayList(); int firstDivisor; int n = 5; // Add the first prime numbers. primes.Add(2); primes.Add(3); // Do the work. while (n < numberToTest) { if (IsPrime(primes, n, out firstDivisor)) { // Report to the client that a prime was found. e = new CalculatePrimeProgressChangedEventArgs( n, (int)((float)n / (float)numberToTest * 100), asyncOp.UserSuppliedState); asyncOp.Post(this.onProgressReportDelegate, e); primes.Add(n); // Yield the rest of this time slice. Thread.Sleep(0); } // Skip even numbers. n += 2; // No prime to report, so just use a // ProgressChangedEventArgs object. e = new ProgressChangedEventArgs( (int)((float)n / (float)numberToTest * 100), asyncOp.UserSuppliedState); asyncOp.Post(this.onProgressReportDelegate, e); } return primes; }
private ArrayList BuildPrimeNumberList(int numberToTest, AsyncOperation asyncOp) { ProgressChangedEventArgs e = null; ArrayList primes = new ArrayList(); int firstDivisor = 1; int n = 5; // Add the first prime numbers. primes.Add((Int32)2); primes.Add((Int32)3); // Do the work. while (n < numberToTest) { if (IsPrime(primes, n, /** @out */firstDivisor)) { // Report to the client that you found a prime. e = new CalculatePrimeProgressChangedEventArgs(n, (int)((float)n / ( float)(numberToTest) * 100), asyncOp.get_UserSuppliedState()); asyncOp.Post(this.onProgressReportDelegate, e); primes.Add((Int32)n); // Yield the rest of this time slice. System.Threading.Thread.Sleep(0); } // Skip even numbers. n += 2; // No prime to report, so just use a // ProgressChangedEventArgs object. e = new ProgressChangedEventArgs( (int)((float)n / ( float)(numberToTest) * 100), asyncOp.get_UserSuppliedState()); asyncOp.Post(this.onProgressReportDelegate, e); } return primes; } //BuildPrimeNumberList
private ArrayList BuildPrimeNumberList(int numberToTest, AsyncOperation asyncOp) { ProgressChangedEventArgs e = null; ArrayList primes = new ArrayList(); int firstDivisor = 1; int n = 5; // Add the first prime numbers. primes.Add((Int32)2); primes.Add((Int32)3); // Do the work. while (n < numberToTest) { if (IsPrime(primes, n, /** @out */ firstDivisor)) { // Report to the client that you found a prime. e = new CalculatePrimeProgressChangedEventArgs(n, (int)((float)n / (float)(numberToTest) * 100), asyncOp.get_UserSuppliedState()); asyncOp.Post(this.onProgressReportDelegate, e); primes.Add((Int32)n); // Yield the rest of this time slice. System.Threading.Thread.Sleep(0); } // Skip even numbers. n += 2; // No prime to report, so just use a // ProgressChangedEventArgs object. e = new ProgressChangedEventArgs( (int)((float)n / (float)(numberToTest) * 100), asyncOp.get_UserSuppliedState()); asyncOp.Post(this.onProgressReportDelegate, e); } return primes; } //BuildPrimeNumberList

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に収録されているすべての辞書からAsyncOperation.Post メソッドを検索する場合は、下記のリンクをクリックしてください。

- AsyncOperation.Post メソッドのページへのリンク