AsyncOperation.Post(SendOrPostCallback, Object) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
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.