// Argumente, die beim Auslösen des Events übergeben werden, definieren public class MyEventArgs : EventArgs { // Rückgabewert des Events (Zugriff mit e.iValue) public readonly int iValue; public MyEventArgs(int val) { iValue = val; } } // Klasse, die den Event auslöst public class MyClass { // Eventhandler public event EventHandler<MyEventArgs-> MyEvent; public int a; public int b; public int Calc() { int iRetVal = a + b; // wenn Event abgefragt werden soll if (MyEvent != null) { // Event auslösen MyEvent(this, new MyEventArgs(iRetVal); } return iRetVal; } }
Anwendungsbeispiel:
// irgendwo im Programm (Formular) // Objekt der Klasse, die das Event auslöst, definieren MyClass mc = new MyClass(); // Funktion, die beim Auslösen des Events anspricht, anmelden mc.MyEvent += new EventHandler<MyEventArgs->(MyCalcEventhandler); // etwas rechnen und implizit das Event auslösen mc.a = 5; mc.b = 7; mc.Calc(); // Funktion, die beim Auslösen des Events abgearbeitet wird private void MyCalcEventhandler(object sender, MyEventArgs e) { Console.WriteLine(e.iValue); Console.WriteLine(e.iValue); }
Manchmal kommt es vor, dass man die hinzugefügten Eventhandler auch wieder entfernen will, dazu folgendes erweitertes Anwendungsbeispiel:
// globale Referenz auf den EventHandler anlegen ("Merker") private EventHandler<MyEventArgs-> _MyEvent = null; ... MyClass mc = new MyClass(); // EventHandler erzeugen _MyEvent = new EventHandler<MyEventArgs->(MyCalcEventhandler); // EventHandler hinzufügen mc.MyEvent += _MyEvent; ... // EventHandler wieder entfernen mc.MyEvent -= _MyEvent;