Nyelv

AsyncOperation.Post(SendOrPostCallback, Object) Metódus

Definíció

Meghív egy delegáltat az alkalmazásmodellnek megfelelő szálon vagy kontextusban.

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)

Paraméterek

d
SendOrPostCallback

Egy SendOrPostCallback objektum, amely körbefuttatja a delegáltat, hogy meghívja a művelet befejezésekor.

arg
Object

A paraméterben található delegált argumentuma d .

Kivételek

A PostOperationCompleted(SendOrPostCallback, Object) metódust korábban már meghívták ehhez a feladathoz.

Példák

Az alábbi példakód egy aszinkron művelet előrehaladásának és növekményes eredményeinek jelentésére szolgáló Post módszert mutatja be. Ez a példakód egy nagyobb, az System.ComponentModel.AsyncOperationManager osztályhoz tartozó példa része.

// 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

Megjegyzések

A Post metódus anélkül hívja meg a paraméter által arg megadott delegáltat, hogy véget vet az aszinkron művelet élettartamának.

A metódust Post tetszés szerint hívhatja meg, míg az aszinkron művelet élettartamát nem fejezte be a hívás PostOperationCompleted. Ezzel a módszerrel jelentést készíthet az előrehaladásról vagy az időközi eredményekről az ügyfeleknek.

A d paraméter körbefuttatja a meghívni kívánt meghatalmazottat, amikor frissítést szeretne közzétenni az aszinkron tevékenység állapotáról. Az AsyncOperation objektum biztosítja, hogy a meghatalmazott az alkalmazásmodellnek megfelelő szálon vagy környezetben legyen meghívva. A metódus opcionálisan olyan eseményt is létrehozhat, amely értesíti az ügyfeleket az állapotváltozásról, az állapotfrissítésről vagy az újonnan elérhető növekményes eredményekről.

A arg paramétert arra kell használni, hogy állapotot adjon át a paraméter által burkolt delegáltnak d . Lehet, hogy hivatkozás egy AsyncOperationobjektumra, vagy egy objektumra System.ComponentModel.ProgressChangedEventArgs . Érdemes lehet saját osztályt System.ComponentModel.ProgressChangedEventArgs levezetni, hogy további állapottárolást biztosítson.

Megjegyzések az öröklőkhöz

Az öröklőknek aszinkronvá kell tenniük a Post(SendOrPostCallback, Object) meghívást, hogy az osztálykódtár-szolgáltatóknak ne kelljen foglalkozniuk a lehetséges verem-túlcsordulásokkal, ha aszinkront feltételeznek, de egy adott alkalmazásmodell szinkron.

Megjegyzés: A konzolalkalmazások nem szinkronizálják a hívások végrehajtását Post(SendOrPostCallback, Object) . Ez okozhatja, hogy ProgressChanged események előfordulnak sorrenden kívül. Ha szeretné, hogy a Post(SendOrPostCallback, Object) hívások szerializált módon történjenek, implementáljon és telepítsen egy SynchronizationContext osztályt.

Az aszinkron osztályok implementálásával kapcsolatos további információkért lásd az eseményalapú aszinkron minta implementálását.

A következőre érvényes:

Lásd még