AsyncOperation.PostOperationCompleted, méthode
Assembly : System (dans system.dll)
public void PostOperationCompleted ( SendOrPostCallback d, Object arg )
public function PostOperationCompleted ( d : SendOrPostCallback, arg : Object )
Paramètres
- d
Objet SendOrPostCallback qui encapsule le délégué à appeler lorsque l'opération se termine.
- arg
Argument pour le délégué contenu dans le paramètre d.
| Type d'exception | Condition |
|---|---|
| OperationCompleted a été appelé précédemment pour cette tâche. | |
| d est référence Null (Nothing en Visual Basic). |
Appelez la méthode PostOperationCompleted pour terminer la durée de vie d'une opération asynchrone. Après avoir appelé cette méthode pour une tâche particulière, les appels à son objet AsyncOperation correspondant lèvent une exception.
Le paramètre d encapsule le délégué que votre composant doit appeler lorsque la durée de vie de la tâche se termine en raison d'une fin de cycle, d'une annulation ou d'un échec de la tâche. 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 délégué peut éventuellement déclencher un événement qui notifie des clients que la durée de vie de la tâche asynchrone est terminée.
Le paramètre arg est utilisé pour passer des informations d'état au délégué de fin d. Vous pouvez utiliser un objet AsyncOperation, ou un objet System.ComponentModel.AsyncCompletedEventArgs comme valeur de paramètre. Si vous souhaitez fournir un stockage des états supplémentaire, vous pouvez également utiliser une instance d'une classe que vous dérivez de la classe System.ComponentModel.AsyncCompletedEventArgs.
Remarques à l'attention des héritiers Les héritiers doivent rendre l'appel PostOperationCompleted asynchrone afin que les fournisseurs de bibliothèques de classes ignorent les dépassements potentiels de capacité de la pile s'ils adoptent le comportement asynchrone dans un modèle d'application particulier qui se trouve être synchrone. La méthode doit être interprétée comme un appel qui « termine la durée de vie », ce qui signifie que l'implémentation doit faire ce qui est approprié pour le modèle d'application. Par exemple, ASP.NET décrémente son décompte des opérations asynchrones restantes. Cette opération doit également mettre l'opération dans un état où tout appel ultérieur échoue, puisqu'elle est désormais terminée. Pour plus d'informations sur l'implémentation de classes asynchrones, consultez Implémentation du modèle asynchrone basé sur des événements.L'exemple de code suivant montre comment utiliser la méthode PostOperationCompleted pour terminer la durée de vie d'une opération asynchrone. Cet exemple de code fait partie d'un exemple plus développé fourni pour la classe System.ComponentModel.AsyncOperationManager.
import System.*; import System.Collections.*; import System.Collections.Specialized.*; import System.ComponentModel.*; import System.Threading.*;
// This method cancels a pending asynchronous operation. public void CancelAsync(object taskId) { lock (userStateToLifetime.SyncRoot) { object obj = userStateToLifetime[taskId]; if (obj != null) { AsyncOperation asyncOp = obj as AsyncOperation; int numberToTest = 0; int firstDivisor = 1; bool isPrime = false; Exception exception = null; bool canceled = true; CalculatePrimeCompletedEventArgs e = new CalculatePrimeCompletedEventArgs( numberToTest, firstDivisor, isPrime, exception, canceled, asyncOp.UserSuppliedState); // The asyncOp object is responsible for // marshaling the call to the proper // thread or context. asyncOp.PostOperationCompleted( onCompletedDelegate, e); } } }
public void CancelAsync(Object taskId)
{
synchronized (userStateToLifetime.get_SyncRoot()) {
Object obj = userStateToLifetime.get_Item(taskId);
if (obj != null) {
AsyncOperation asyncOp = (AsyncOperation)obj;
int numberToTest = 0;
int firstDivisor = 1;
boolean isPrime = false;
Exception exception = null;
boolean cancelled = true;
CalculatePrimeCompletedEventArgs e =
new CalculatePrimeCompletedEventArgs(numberToTest,
firstDivisor, isPrime, exception, cancelled,
asyncOp.get_UserSuppliedState());
// The asyncOp object is responsible for
// marshalling the call to the proper
// thread or context.
asyncOp.PostOperationCompleted(onCompletedDelegate, e);
}
}
} //CancelAsync
public void CancelAsync(Object taskId)
{
synchronized (userStateToLifetime.get_SyncRoot()) {
Object obj = userStateToLifetime.get_Item(taskId);
if (obj != null) {
AsyncOperation asyncOp = (AsyncOperation)obj;
int numberToTest = 0;
int firstDivisor = 1;
boolean isPrime = false;
System.Exception exception = null;
boolean cancelled = true;
CalculatePrimeCompletedEventArgs e =
new CalculatePrimeCompletedEventArgs(numberToTest,
firstDivisor, isPrime, exception, cancelled,
asyncOp.get_UserSuppliedState());
// The asyncOp object is responsible for
// marshalling the call to the proper
// thread or context.
asyncOp.PostOperationCompleted(onCompletedDelegate, e);
}
}
} //CancelAsync
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition
Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.