Appels asynchrones des délégués
Parfois, si vous souhaitez qu'un délégué complète un complexe et du temps -tâche consommatrice Lors de l'exécution de tâches, les appels synchrones ne sont pas un bon choix, car les utilisateurs seront confrontés à une consommation de temps ennuyeuse et longue (relativement parlant) En attente. A ce moment, l'appel asynchrone du délégué montre ses avantages. L'appel asynchrone du délégué C# est également encapsulé via beginInvoke. et endInvke pour terminer. Un exemple est donné ci-dessous.
1. définit un délégué, myDelegate
2. Un événement est défini pour une souscription externe 3.
Incrément, champ de test4.
doIt méthode, à chaque fois on l'appelle, incrément augmentera tout seul, lorsque la valeur est 5 , l'événement d'appel asynchrone
Le point clé est ce code : La fonction contient quatre paramètres : AsyncCallback
objet : Ce paramètre signifie lui dire quoi faire ensuite lorsque le rappel est terminé, vous devez donc lui transmettre une méthode.
IAsyncResult result = this.callBack.BeginInvoke (new AsyncCallback( (ia) => { MessageBox.Show("completed"); AsyncResult ar = (AsyncResult)ia; MyDelegate md = ar.AsyncDelegate as MyDelegate; int r = md.EndInvoke(ia); MessageBox.Show(r.ToString() + ia.AsyncState); }), "message"); MessageBox.Show("begin invoke");
Recevoir une méthode ici, ici j'ai utilisé lambdaexpression)
. ObjectObject : Paramètres à transmettre à la méthode appelée à la fin du rappel. AsyncResult ar = (AsyncResult)ia;//// Récupérez le IasyncResult entrant et convertissez-le en un objet AsyncResult MyDelegate md = ar.AsyncDelegate as MyDelegate;////get rappelObjet int r = md.EndInvoke(ia);////Terminer l'appel du délégué et obtenir la valeur de retour MessageBox.Show(r.ToString() ia.AsyncState);////Vérifiez si la valeur de retour est obtenue OK, maintenant que le délégué asynchrone a été défini, l'étape suivante consiste à appeler : Description du code : NouveauA timer et un objet asyntroniseDelegate. Abonnez-vous à l'événement callBack Enfin, la méthode renvoie un 1<.> . Utilisez minuterie pour terminer l'opération de incrémentation . Accumulez 1 chaque seconde. Lorsque l'incrément s'accumule jusqu'à 5, Le L'événement callback est déclenché. A ce moment, il est demandé d'effectuer une tâche très complexe, en boucle 10 milliards de fois. Après l'exécution, vous verrez la boîte de dialogue , suivi de , après environ 2-3 secondes, la boîte de dialogue apparaît, puis et (appel visible et asynchrone Enfin, nous avons réussi obtenu la valeur de retour de la méthode)
Ce qui précède est l'appel asynchrone du délégué c# Contenu du graphique exemples de code, veuillez faire attention au site Web PHP chinois (www.php.cn) pour plus de contenu connexe !