Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Aufgabe - Erstellen Eines Benutzerdefinierten Events | Interaktive GUI
Fortgeschrittenes C# mit .NET
course content

Kursinhalt

Fortgeschrittenes C# mit .NET

Fortgeschrittenes C# mit .NET

1. Einführung in die Desktop-Entwicklung mit .NET
2. Interaktive GUI
3. Threading
4. Generics & Reflection

book
Aufgabe - Erstellen Eines Benutzerdefinierten Events

Das Basisprogramm ist im Github Repository verfügbar. Klonen Sie das Repository, um mit der Lösung der Aufgabe zu beginnen.

Wir möchten ein Programm erstellen, das ein zufälliges Bild anzeigt, das von einer API empfangen wird, wann immer der Benutzer auf die Schaltfläche "Bild abrufen" klickt.

Das Programm ruft einen Link zu einem zufälligen Bild von der API ab, wenn der Benutzer auf die Schaltfläche "Bild abrufen" klickt, und setzt die "Source"-Eigenschaft des "mainImage" auf diesen abgerufenen Link.

Die GetImage-Ereignishandlermethode ist an den Clicked-EventHandler der Schaltfläche gebunden. Immer wenn der Benutzer auf die Schaltfläche klickt, führt das Programm diese Methode aus und sendet eine GET-Anfrage an die URL https://random.imagecdn.app/v1/image.

Wenn die Methode eine Antwort von der API erhält, extrahiert sie den Inhalt aus der Antwort - erwartet wird eine rohe URL (Link) eines Bildes. Und sie übergibt diesen als String an die OnApiResponse-Methode, die von Ihnen definiert werden soll.

Die OnApiResponse-Methode sollte den EventHandler der apiEvent-Klasse ausführen, die Sie erstellen werden. Außerdem sollte sie den "content" als Argument an die Ereignishandlermethoden weitergeben, und dafür können Sie die apiEventArgs verwenden, die bereits für Sie definiert wurden. Sie können den Inhalt in der Link-Eigenschaft einer neuen apiEventArgs-Instanz speichern und ihn als zweites Argument an die Ereignishandlerausführung übergeben.

So wird der gesamte Ablauf des Programms sein:

  1. Der Benutzer klickt auf Bild abrufen;
  2. Das Programm sendet eine GET-Anfrage;
  3. Die API antwortet mit der URL eines zufälligen Bildes;
  4. Die URL wird als string an die OnApiResponse-Methode der apiEvent-Klasse übergeben;
  5. Der EventHandler der apiEvent-Klasse wird aufgerufen, wodurch alle gebundenen Methoden (Ereignishandler) aufgerufen werden;
  6. Die URL wird an die gebundenen Ereignishandler gesendet, wodurch die SetImage-Methode aufgerufen wird;
  7. Das Bild wird auf dem Bildschirm angezeigt;

Lernziel:

Sie fragen sich vielleicht, warum dieser scheinbar unnötige "Zyklus" erstellt wurde. Wir hätten einfach mainImage.Source = content direkt in der GetImage-Methode schreiben können, in der die API-Antwort empfangen wird, und dadurch hätten wir das gesamte Ereignissystem rund um den API-Aufruf vermeiden können. Außerdem wäre in diesem Fall die Programmausführung und der Code viel kürzer gewesen:

  1. Der Benutzer klickt auf Bild abrufen;
  2. Das Programm sendet eine GET-Anfrage;
  3. Die API antwortet mit einer URL eines zufälligen Bildes;
  4. Das neue Bild wird auf dem Bildschirm angezeigt;

Ein Vorteil der Erstellung des apiEvent ist jedoch, dass wir dieses Ereignis global in der Anwendung verwenden können. Dies ermöglicht es uns, Methoden an den Ereignishandler dieses Ereignisses aus mehreren verschiedenen externen Klassen zu binden.

Sie müssen im Grunde die "Publisher"-Klasse aus dem folgenden Diagramm replizieren:

Ihre Aufgabe

Im Folgenden finden Sie eine kurze Beschreibung Ihrer Aufgabe:

  1. Erstellen Sie eine neue öffentliche Klasse namens apiEvent
  2. Erstellen Sie einen Delegatentyp namens apiEventHandler, der apiEventArgs als zweites Argument akzeptieren kann.
  3. Erstellen Sie einen öffentlichen Delegaten mit dem kürzlich definierten Delegatentyp. Nennen Sie ihn OnResponse.
  4. Erstellen Sie eine Delegatenaufrufmethode namens OnApiResponse, die ein string-Argument akzeptieren sollte. Sie können das Argument "content" nennen.
  5. Rufen Sie innerhalb von OnApiResponse den Delegaten auf, wenn er nicht null ist, und übergeben Sie den Wert von "content" an die Ereignishandlermethoden, indem Sie die apiEventArgs-Methode verwenden.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

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