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.

C# Videokurs
RABATT AKTION
10
Tage
10
Stunden
10
Minuten
10
Sek.
nur 39,99€

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.

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.

Programmieren lernen muss nicht schwer sein! Mit meinem C# Video-Intensivkurs wirst du ganz einfach und im Handumdrehen zum echten .NET Profi! Schau dir jetzt den Videokurs an um zügig ein besserer Entwickler zu werden, mehr Geld zu verdienen oder deinen ersten Job als Quereinsteiger zu finden.

Willst du wissen, wie du einfach und schnell zum C# Profi wirst?
PRogrammieren lernen kann einfach sein!
Overlay Image
Willst du wissen, wie du einfach und schnell zum C# Profi wirst?
PRogrammieren lernen kann einfach sein!
Overlay Image
Setze dein gelerntes Wissen in die Tat um und programmiere echte Anwendungen.
1. Tipp
1/3
Overlay Image
Setze dein gelerntes Wissen in die Tat um und programmiere echte Anwendungen.
1. Tipp
1/3
Overlay Image
Lerne wie du mit Debugging Fehler eines Programmes professionell beheben kannst.
2. Tipp
2/3
Overlay Image
Lerne wie du mit Debugging Fehler eines Programmes professionell beheben kannst.
2. Tipp
2/3
Overlay Image
Fokussiere dich beim lernen auf die richtigen Inhalte und nicht auf die Menge.
3. Tipp
3/3
Overlay Image
Fokussiere dich beim lernen auf die richtigen Inhalte und nicht auf die Menge.
3. Tipp
3/3
Overlay Image
Ja, so einfach kann es sein! Mit meinem C# Videokurs wirst du ganz einfach zum echten Profi Entwickler. Möchtest du mehr dazu erfahren?
Alles in einem Kurs
Overlay Image
Ja, so einfach kann es sein! Mit meinem C# Videokurs wirst du im Handumdrehen zum echten Profi Entwickler. Möchtest du mehr dazu erfahren?
Alles in einem Kurs
Overlay Image
Diese Seite verwendet Cookies. Wir können diese zur Analyse unserer Besucherdaten platzieren, um unsere Website zu verbessern, personalisierte Inhalte anzuzeigen und Ihnen ein großartiges Website-Erlebnis zu bieten. Für weitere Informationen zu den von uns verwendeten Cookies öffnen Sie die Einstellungen.
Datenschutz
IT Leismann, Inhaber: Jannick Leismann (Firmensitz: Deutschland), verarbeitet zum Betrieb dieser Website personenbezogene Daten nur im technisch unbedingt notwendigen Umfang. Alle Details dazu in der Datenschutzerklärung.
Datenschutz
IT Leismann, Inhaber: Jannick Leismann (Firmensitz: Deutschland), verarbeitet zum Betrieb dieser Website personenbezogene Daten nur im technisch unbedingt notwendigen Umfang. Alle Details dazu in der Datenschutzerklärung.