AsyncOperation.Post メソッドとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > AsyncOperation.Post メソッドの意味・解説 

AsyncOperation.Post メソッド

メモ : このメソッドは、.NET Framework version 2.0新しく追加されたものです。

アプリケーション モデル適したスレッドまたはコンテキストデリゲート呼び出します。

名前空間: System.ComponentModel
アセンブリ: System (system.dll 内)
構文構文

Public Sub Post ( _
    d As SendOrPostCallback, _
    arg As Object _
)
Dim instance As AsyncOperation
Dim d As SendOrPostCallback
Dim arg As Object

instance.Post(d, arg)
public void Post (
    SendOrPostCallback d,
    Object arg
)
public:
void Post (
    SendOrPostCallback^ d, 
    Object^ arg
)
public void Post (
    SendOrPostCallback d, 
    Object arg
)
public function Post (
    d : SendOrPostCallback, 
    arg : Object
)

パラメータ

d

操作終了時呼び出されるデリゲートラップする SendOrPostCallback オブジェクト

arg

d パラメータ格納されているデリゲート引数

例外例外
例外種類条件

InvalidOperationException

PostOperationCompleted メソッドは、このタスクに対して既に呼び出されています。

ArgumentNullException

dnull 参照 (Visual Basic では Nothing) です。

解説解説

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
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照


このページでは「.NET Framework クラス ライブラリ リファレンス」からAsyncOperation.Post メソッドを検索した結果を表示しています。
Weblioに収録されているすべての辞書からAsyncOperation.Post メソッドを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からAsyncOperation.Post メソッド を検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

AsyncOperation.Post メソッドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



AsyncOperation.Post メソッドのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS