Maison  >  Article  >  développement back-end  >  Exemple de code graphique d'appel asynchrone d'un délégué c#

Exemple de code graphique d'appel asynchrone d'un délégué c#

黄舟
黄舟original
2017-03-04 10:17:411632parcourir

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.

nouveau AsyncCallback(
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 !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn