C# Events

Mit C# Events kannst du Klassen zu einem bestimmten Zeitpunkt über ein Geschehen in deiner Anwendung benachrichtigen und Daten übersenden.

Löst eine Klasse ein Event aus, dann ist die Klasse der Publisher. Empfängt eine Klasse ein Event, dann ist die Klasse ein Subscriber. Du kannst mehrere Subscriber erstellen, die alle auf das Auftreten eines Events warten. Wenn beispielsweise ein Publisher ein Event auslöst, registrieren sich die Subscriber bei diesem Event, um die Benachrichtigung zu verarbeiten. Du kannst ein Event abonnieren, in dem du einem Event einen Eventhandler hinzufügst.

Mit meinem kostenlosen Videokurs zu den Grundlagen von C# findest du den perfekten Einstieg in die Softwareentwicklung mit C#. Egal, ob du C# als Hobby, für die Uni oder für eine neue Karriere lernen möchtest, mit diesem Kurs lernst du C# schnell, einfach und professionell.
Mit meinem kostenlosen Videokurs zu den Grundlagen von C# findest du den perfekten Einstieg in die Softwareentwicklung mit C#.

Mit C# Events kannst du Objekten die Möglichkeit bieten, leichter miteinander zu kommunizieren und asynchrone Vorgänge zu behandeln. Ein Event ist ein spezieller Delegate. Mit einem Delegat kannst du die Signatur eines Eventhandler-Method definieren. Du registrierst also die Subscriber-Klasse für die Ereignishandler-Methode beim Delegaten, und der Delegate benachrichtigt dann die Subscriber-Klasse, wenn das Ereignis eintritt.

So kannst du ein Event erstellen und ausführen (invoking):

public delegate void ProcessCompleted();  // Delegate Methode erstellen
                    
public class ProgramLogic
{
    public event ProcessCompleted CompletedEvent; // Event erstellen und an delegate binden

    public void Start()
    {
        Console.WriteLine("Started!");

        // Funktionaler Code hier

        Console.WriteLine("Done!");

        // Überprüfen ob es Subscriber gibt und dann das Event ausführen
        CompletedEvent?.Invoke();
    }


}

Hinweis: Mit CompletedEvent? überprüfen wir, ob es Listener für dieses Event gibt. Führst du ein Event (Invoke) ohne Listener aus, kommt es zu einer Exception.

Events sind in C# defintiv ein wichtiges Thema und wenn du noch mehr über sie und viele weitere Themen lernen möchtest, dann schau dir unbedingt die Inhalte des C# Video-Intensivkurses an. Mit diesem Kurs vervielfachen wir deine C# Expertise in kürzester Zeit um aus dir einen vollwertigen C# Entwickler zu machen.

C# Event Subscriber / Listener hinzufügen

class Program
{
    public static void Main()
    {
        ProgramLogic logic = new ProgramLogic();

        logic.CompletedEvent += logic.OnCompleted; // Eventhandler hinzufügen

        logic.StartProcess();
    }

    // Event handler (Methode wird ausgeführt wenn Event invoked wird)
    public static void OnCompleted()
    {
        Console.WriteLine("Process Completed!");
    }
}

Die Program-Klasse abonniert das ProcessCompleted-Ereignis und registriert sich mit dem += Operator bei diesem. Auf die gleiche Weise fügen wir der Aufrufliste eines Multicastdelegers Methoden hinzu. Die OnCompleted() Methode behandelt das Ereignis, da es mit der Signatur des ProcessCompleted Delegaten übereinstimmt.

Integrierter EventHandler

.NET Framework enthält vordefinierte Delegattypen für die gängigsten Ereignisse, z. B. EventHandler. In der Regel sollte jedes Ereignis zwei Parameter enthalten: die Quelle des Events und die Daten des Events. Wenn das Event keine Daten enthält, die an Handler gesendet werden sollen, verwende den EventHandler Delegaten. Wenn das Event Daten enthält, verwende den EventHandler<TEventArgs> Delegaten.

Im obigen Beispiel kann der EventHandler Delegat verwendet werden, ohne einen benutzerdefinierten ProcessCompleted Delegaten zu deklarieren, wie unten gezeigt:

class Program
{
    public static void Main()
    {
        ProgramLogic logic = new ProgramLogic();

        logic.CompletedEvent += logic.OnCompleted; // Eventhandler hinzufügen

        logic.StartProcess();
    }

    // Event handler mit passender Signatur (Parameter)
    public static void OnCompleted(object sender, EventArgs e)
    {
        Console.WriteLine("Process Completed!");
    }
}

public class ProgramLogic 
{
    // Built-in .NET EventHandler
    public event EventHandler ProcessCompleted; 

    public void StartProcess()
    {
        Console.WriteLine("Started!");
        // Funktionaler Code hier
        Console.WriteLine("Done");

        // Sender und Daten werde übergeben
        ProcessCompleted?.Invoke(this, EventArgs.Empty);
    }   
}

C# Events Daten übergeben

Die meisten Events senden einige Daten an die Subscribers. Die EventArgs-Klasse ist die Basisklasse für alle Events-Datenklassen. .NET enthält viele integrierte Events-Datenklassen doch du kannst auch eine eigene benutzerdefinierte Klasse für deine Event-Daten erstellen. Dafür leitest du deine Klasse einfach von der EventArgs Klasse ab.

Hier kannst du noch mehr über C# Events erfahren oder lies dir hier unseren Beitrag zum Thema SQL Datenbanken und C# durch.

✅ Lerne alle Grundlagen der C# Programmierung ✅ Der ideale Einstieg in die Softwareentwicklung ✅ 30+ HD Videolektionen ✅ Komplett kostenlos ✅ Sofortiger Zugriff
Der C# Grundlagenkurs
Kostenlos
Overlay Image
Der C# Grundlagenkurs
Kostenlos
✅ Alle Grundlagen der C# Programmierung ✅ Der ideale Einstieg in die Entwicklung ✅ 30+ HD Videolektionen ✅ Komplett kostenlos ✅ Sofortiger Zugriff
Overlay Image