Teilen über


AsyncOperation.Post(SendOrPostCallback, Object) Methode

Definition

Ruft einen Delegaten auf dem Thread oder Kontext auf, der für das Anwendungsmodell geeignet ist.

public:
 void Post(System::Threading::SendOrPostCallback ^ d, System::Object ^ arg);
public void Post (System.Threading.SendOrPostCallback d, object arg);
public void Post (System.Threading.SendOrPostCallback d, object? arg);
member this.Post : System.Threading.SendOrPostCallback * obj -> unit
Public Sub Post (d As SendOrPostCallback, arg As Object)

Parameter

d
SendOrPostCallback

Ein SendOrPostCallback-Objekt, das den am Ende des Vorgangs aufzurufenden Delegaten umschließt.

arg
Object

Ein Argument für den Delegaten, der im d-Parameter enthalten ist.

Ausnahmen

Die PostOperationCompleted(SendOrPostCallback, Object)-Methode wurde zuvor für diese Aufgabe aufgerufen.

d ist null.

Beispiele

Im folgenden Codebeispiel wird die Verwendung der Post -Methode zum Melden des Fortschritts und der inkrementellen Ergebnisse eines asynchronen Vorgangs veranschaulicht. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die System.ComponentModel.AsyncOperationManager-Klasse bereitgestellt wird.

// 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 && 
           !TaskCanceled( asyncOp.UserSuppliedState ) )
    {
        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;
    }

    return primes;
}
' 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 And _
        Not Me.TaskCanceled(asyncOp.UserSuppliedState)

        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

    End While

    Return primes

End Function

Hinweise

Die Post -Methode ruft den vom arg Parameter angegebenen Delegaten auf, ohne die Lebensdauer des asynchronen Vorgangs zu beenden.

Sie können die Post -Methode beliebig oft aufrufen, während die Lebensdauer des asynchronen Vorgangs nicht durch einen Aufruf PostOperationCompletedvon beendet wurde. Sie können die -Methode verwenden, um Status- oder Zwischenergebnisse an Clients zurück zu melden.

Der d Parameter umschließt den Delegat, den Sie aufrufen möchten, wenn Sie ein Update über die status der asynchronen Aufgabe veröffentlichen möchten. Das AsyncOperation -Objekt stellt sicher, dass Ihr Delegat in dem Thread oder Kontext aufgerufen wird, der für das Anwendungsmodell geeignet ist. Ihre Methode kann optional ein Ereignis auslösen, das Clients über eine status Änderung, Statusaktualisierung oder neu verfügbare inkrementelle Ergebnisse benachrichtigt.

Der arg Parameter sollte verwendet werden, um den Zustand an den Delegaten zu übergeben, der d vom Parameter umschlossen wird. Es kann sich um einen Verweis auf ein AsyncOperation- oder um ein System.ComponentModel.ProgressChangedEventArgs -Objekt handeln. Es kann wünschenswert sein, ihre eigene Klasse von System.ComponentModel.ProgressChangedEventArgs abzuleiten, um zusätzlichen Zustandsspeicher bereitzustellen.

Hinweise für Vererber

Vererber müssen den Post(SendOrPostCallback, Object) Aufruf asynchron durchführen, damit klassenbibliotheksanbieter sich nicht mit potenziellen Stapelüberläufen befassen müssen, wenn sie von einer Asynchronie ausgehen, aber ein bestimmtes Anwendungsmodell synchron ist.

Hinweis: Konsolenanwendungen synchronisieren die Ausführung von Post(SendOrPostCallback, Object) Aufrufen nicht. Das kann dazu führen, dass ProgressChanged-Ereignisse nicht in der richtigen Reihenfolge ausgelöst werden. Wenn Sie eine serialisierte Ausführung von Post(SendOrPostCallback, Object)-Aufrufen wünschen, implementieren und installieren Sie eine SynchronizationContext-Klasse.

Weitere Informationen zum Implementieren asynchroner Klassen finden Sie unter Implementieren des ereignisbasierten asynchronen Musters.

Gilt für:

Weitere Informationen