AsyncOperation.Post(SendOrPostCallback, Object) Methode

Definitie

Roept een gemachtigde aan voor de thread of context die geschikt is voor het toepassingsmodel.

public:
 void Post(System::Threading::SendOrPostCallback ^ d, System::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)

Parameters

d
SendOrPostCallback

Een SendOrPostCallback object dat de gemachtigde terugloopt die moet worden aangeroepen wanneer de bewerking wordt beëindigd.

arg
Object

Een argument voor de gemachtigde in de d parameter.

Uitzonderingen

De PostOperationCompleted(SendOrPostCallback, Object) methode is eerder aangeroepen voor deze taak.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u de methode gebruikt voor het Post rapporteren van voortgang en incrementele resultaten van een asynchrone bewerking. Dit codevoorbeeld maakt deel uit van een groter voorbeeld voor de System.ComponentModel.AsyncOperationManager klasse.

// This method computes the list of prime numbers used by the
// IsPrime method.
ArrayList BuildPrimeNumberList(
    int numberToTest,
    AsyncOperation asyncOp)
{
    ArrayList primes = [];
    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 int firstDivisor))
        {
            // Report to the client that a prime was found.
            ProgressChangedEventArgs e = new CalculatePrimeProgressChangedEventArgs(
                n,
                (int)(n / (float)numberToTest * 100),
                asyncOp.UserSuppliedState);

            asyncOp.Post(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

Opmerkingen

De Post methode roept de gemachtigde aan die is opgegeven door de arg parameter zonder de levensduur van de asynchrone bewerking te beëindigen.

U kunt de Post methode zo vaak aanroepen als u wilt terwijl de levensduur van de asynchrone bewerking niet is beëindigd door een aanroep naar PostOperationCompleted. U kunt de methode gebruiken om de voortgang of tussentijdse resultaten terug te rapporteren aan clients.

De d parameter verpakt de gemachtigde die u wilt aanroepen wanneer u een update wilt posten over de status van de asynchrone taak. Het AsyncOperation object zorgt ervoor dat uw gemachtigde wordt aangeroepen op de thread of context die geschikt is voor het toepassingsmodel. Uw methode kan eventueel een gebeurtenis genereren waarmee clients worden op de hoogte gesteld van een statuswijziging, voortgangsupdate of nieuw beschikbare incrementele resultaten.

De arg parameter moet worden gebruikt om de status door te geven aan de gemachtigde die door de d parameter is verpakt. Het kan een verwijzing naar een AsyncOperationof een System.ComponentModel.ProgressChangedEventArgs object zijn. Het kan wenselijk zijn om uw eigen klasse af te leiden van System.ComponentModel.ProgressChangedEventArgs om extra statusopslag te bieden.

Notities voor overnemers

Overnames moeten de Post(SendOrPostCallback, Object) aanroep asynchroon maken, zodat klassebibliotheekproviders zich niet hoeven bezig te houden met potentiële stack-overloop als ze asynchroon aannemen, maar een bepaald toepassingsmodel synchroon is.

Opmerking: Consoletoepassingen synchroniseren de uitvoering van Post(SendOrPostCallback, Object) aanroepen niet. Dit kan ertoe leiden dat ProgressChanged gebeurtenissen in verkeerde volgorde worden gegenereerd. Als u de oproepen naar Post(SendOrPostCallback, Object) in serie wilt uitvoeren, implementeert en installeert u een SynchronizationContext class.

Zie Het Asynchrone patroon op basis van gebeurtenissen implementeren voor meer informatie over het implementeren van asynchrone klassen.

Van toepassing op

Zie ook