Partager via


AsyncOperation.Post(SendOrPostCallback, Object) Méthode

Définition

Appelle un délégué sur le thread ou le contexte approprié pour le modèle d'application.

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ètres

d
SendOrPostCallback

Objet SendOrPostCallback qui inclut dans un wrapper le délégué à appeler lorsque l'opération se termine.

arg
Object

Argument pour le délégué contenu dans le paramètre d.

Exceptions

La méthode PostOperationCompleted(SendOrPostCallback, Object) a été appelée précédemment pour cette tâche.

d a la valeur null.

Exemples

L’exemple de code suivant illustre l’utilisation de la méthode pour signaler la Post progression et les résultats incrémentiels d’une opération asynchrone. Cet exemple de code fait partie d’un exemple plus grand fourni pour la System.ComponentModel.AsyncOperationManager classe .

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

Remarques

La Post méthode appelle le délégué spécifié par le arg paramètre sans mettre fin à la durée de vie de l’opération asynchrone.

Vous pouvez appeler la Post méthode aussi souvent que vous le souhaitez, alors que la durée de vie de l’opération asynchrone n’a pas été terminée par un appel à PostOperationCompleted. Vous pouvez utiliser la méthode pour signaler la progression ou les résultats intermédiaires aux clients.

Le d paramètre encapsule le délégué que vous souhaitez appeler lorsque vous souhaitez publier une mise à jour sur la status de la tâche asynchrone. L’objet AsyncOperation garantit que votre délégué est appelé sur le thread ou le contexte approprié pour le modèle d’application. Votre méthode peut éventuellement déclencher un événement qui avertit les clients d’une modification status, d’une mise à jour de progression ou de résultats incrémentiels nouvellement disponibles.

Le arg paramètre doit être utilisé pour passer l’état au délégué encapsulé par le d paramètre. Il peut s’agir d’une référence à un AsyncOperationobjet ou d’un System.ComponentModel.ProgressChangedEventArgs objet. Il peut être souhaitable de dériver votre propre classe pour System.ComponentModel.ProgressChangedEventArgs fournir un stockage d’état supplémentaire.

Notes pour les héritiers

Les héritiers doivent rendre l’appel Post(SendOrPostCallback, Object) asynchrone, de sorte que les fournisseurs de bibliothèques de classes n’ont pas besoin de se préoccuper des dépassements de pile potentiels s’ils supposent qu’ils sont asynchroniques, mais qu’un modèle d’application particulier est synchrone.

Remarque : Les applications console ne synchronisent pas l’exécution des Post(SendOrPostCallback, Object) appels. Cela peut entraîner le déclenchement d'événements ProgressChanged dans le désordre. Si vous souhaitez que l'exécution des appels Post(SendOrPostCallback, Object) soit sérialisée, implémentez et installez une classe SynchronizationContext.

Pour plus d’informations sur l’implémentation de classes asynchrones, consultez Implémentation du modèle asynchrone basé sur les événements.

S’applique à

Voir aussi