Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Tâche - Créer un Événement Personnalisé | GUI Interactif
C# Avancé Avec .NET
course content

Contenu du cours

C# Avancé Avec .NET

C# Avancé Avec .NET

1. Introduction au Développement de Bureau avec .NET
2. GUI Interactif
3. Threading
4. Génériques et Réflexion

book
Tâche - Créer un Événement Personnalisé

Le programme de base est disponible sur le dépôt Github. Clonez le dépôt pour commencer à résoudre la tâche.

Nous visons à créer un programme qui affiche une image aléatoire reçue d'une API chaque fois que l'utilisateur clique sur le bouton "Obtenir une image".

Le programme récupère un lien d'une image aléatoire de l'API lorsque l'utilisateur clique sur le bouton "Obtenir une image", et définit la propriété "Source" de "mainImage" sur ce lien récupéré.

La méthode de gestionnaire d'événements GetImage est liée à l'EventHandler Clicked du bouton. Donc, chaque fois que l'utilisateur clique sur le bouton, le programme exécute cette méthode et effectue une requête GET à l'URL https://random.imagecdn.app/v1/image.

Lorsque la méthode reçoit une réponse de l'API, elle extrait le contenu de la réponse - qui devrait être une URL brute (lien) d'une image. Et elle passe cela sous forme de chaîne dans la méthode OnApiResponse que vous devez définir.

La méthode OnApiResponse doit exécuter l'EventHandler de la classe apiEvent que vous allez créer. De plus, elle doit transmettre le "contenu" aux méthodes de gestionnaire d'événements en tant qu'argument et pour cela, vous pouvez utiliser apiEventArgs qui a déjà été défini pour vous. Vous pouvez stocker le contenu dans la propriété Link d'une nouvelle instance de apiEventArgs et le passer comme deuxième argument à l'exécution du gestionnaire d'événements.

Voici donc le déroulement du programme :

  1. L'utilisateur clique sur Obtenir une image ;
  2. Le programme effectue une requête GET ;
  3. L'API répond avec l'URL d'une image aléatoire ;
  4. L'URL est transmise sous forme de string à la méthode OnApiResponse de la classe apiEvent ;
  5. L'EventHandler de la classe apiEvent est invoqué, invoquant à son tour toutes les méthodes liées (gestionnaires d'événements) ;
  6. L'URL est envoyée aux gestionnaires d'événements liés, invoquant ainsi la méthode SetImage ;
  7. L'image est affichée à l'écran ;

Objectif d'apprentissage :

Vous vous demandez peut-être, quel était le besoin de créer ce "cycle" apparemment inutile. Nous aurions pu simplement écrire mainImage.Source = content directement dans la méthode GetImage où la réponse de l'API est reçue, et en faisant cela, nous aurions pu éviter de créer tout le système d'événements autour de l'appel API. De plus, dans ce cas, l'exécution du programme et le code auraient été beaucoup plus courts :

  1. L'utilisateur clique sur Obtenir une image ;
  2. Le programme effectue une requête GET ;
  3. L'API répond avec une URL d'une image aléatoire ;
  4. La nouvelle image est affichée à l'écran ;

Cependant, un avantage de créer l'apiEvent est que nous pouvons utiliser cet événement globalement dans l'application. Ce qui nous permet de lier des méthodes au gestionnaire d'événements de cet événement depuis plusieurs classes externes différentes.

Vous devez essentiellement reproduire la classe "Publisher" du diagramme suivant :

Votre Tâche

Voici une description concise de votre tâche :

  1. Créez une nouvelle classe publique appelée apiEvent
  2. Créez un type de délégué appelé apiEventHandler qui peut accepter apiEventArgs comme deuxième argument.
  3. Créez un délégué public en utilisant le type de délégué récemment défini. Appelez-le OnResponse.
  4. Créez une méthode d'invocation de délégué appelée OnApiResponse et elle doit accepter un argument string. Vous pouvez nommer l'argument "content".
  5. À l'intérieur de OnApiResponse, invoquez le délégué s'il n'est pas nul et passez la valeur de "content" aux méthodes du gestionnaire d'événements en utilisant la méthode apiEventArgs.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 6
We're sorry to hear that something went wrong. What happened?
some-alt