
Dieser Codeschnippsel soll exemplarisch zeigen, wie man in C# eigene Events definiert.
Als Beispiel dient hier die Überwachung von E-Mails in der Konsole.
1 /// <summary>
2 /// Ein Objekt dieser Klasse wird an den Ereignis-Abonnenten geliefert
3 /// </summary>
4 public class NeueEMailArgs : EventArgs
5 {
6 // Eigenschaften, die uns in diesem Beispiel interessiere.
7 // Können nach Bedarf erweitert werden.
8 public String Betreff { get; private set; }
9 public String Absender { get; private set; }
10
11 // Konstruktor mit den Standard-Parametern, die wir als Pflicht ansehen
12 public NeueEMailArgs( String absender, String betreff )
13 {
14 // Zuweisen
15 this.Betreff = betreff;
16 this.Absender = absender;
17 }
18 }
19
20 /// <summary>
21 /// Klasse, die ein Postfach überwacht und über neue EMail benachrichtigt
22 /// </summary>
23 public class EMailUeberwachung
24 {
25 /// <summary>
26 /// Das Postfach, das überwacht werden soll
27 /// </summary>
28 private readonly MailPostfach _mailPostfach;
29
30 /// <summary>
31 /// Konstrktor, der das Postfach empfängt, das er überwachen soll
32 /// </summary>
33 /// <param name="mailPostfach"></param>
34 public EMailUeberwachung( MailPostfach mailPostfach )
35 {
36
37 _mailPostfach = mailPostfach;
38 }
39
40 public delegate void MyNeueEMailHandler( object sender, NeueEMailArgs e );
41
42 // Definieren eines Event Handlers
43 public event MyNeueEMailHandler OnNeueEMail;
44
45 /// <summary>
46 /// Diese Methode feuert letzten Endes das Ereignis ab.
47 /// Der Abonnent erhält die Informationen, die wir ihm über die Ereignisargumente geben.
48 /// </summary>
49 /// <param name="e"></param>
50 private void FeuerNeueEMail( NeueEMailArgs e )
51 {
52 // Prüfen, ob überhaupt irgendjemand den Event abonniert hat
53 if ( OnNeueEMail != null )
54 {
55 // Ja, der Event hat mindestens einen Abonnenten
56 OnNeueEMail( this, e );
57 }
58 }
59
60 public void Start( )
61 {
62 // Hier befindet sich nun die Logik, die das Postfach überwachen soll
63 // ....
64
65 // Es wurde eine neue Mail gefunden
66 var emailArgs = new NeueEMailArgs( "[email protected]", "Es wurde eine neue Mail empfangen" );
67
68 // Event abfeuern
69 FeuerNeueEMail( emailArgs );
70 }
71 }
72 /// <summary>
73 /// Inhalt nicht definiert; dient hier nur zur Komplettierung des Beispiels
74 /// </summary>
75 public class MailPostfach
76 {
77
78 }
79
80 /// <summary>
81 /// Die eigentliche Anwendung
82 /// </summary>
83 public class Programm
84 {
85 public static void Main( params String[ ] args )
86 {
87 // Definieren unseres Postfachs
88 var myPostfach = new MailPostfach( );
89
90 // Damit die Ovberfläche bedienbar bleibt, während im Hintergrund nach neuen Mails geschaut wird, lagern wir die Überwachung in einen eigenen Task aus.
91 var eMailueberwachungTask = Task.Factory.StartNew( ( ) =>
92 {
93 // Starten der E-Mail-Überwachung
94 EMailUeberwachung mailUeberwachung = new EMailUeberwachung( myPostfach );
95
96 mailUeberwachung.OnNeueEMail += OnNeueEMail;
97 } );
98
99 // Auf Beenden des Benutzers warten.
100 Console.WriteLine( "Die E-Mail überwachung ist aktiv. Drücken Sie eine Taste nach Wahl um die Anwendung zu beenden." );
101 Console.ReadKey( );
102
103 // Ein sauberes Beenden des Tasks der E-Mail-Überwachung würde über den CancellationTokenSource laufen;
104 // dies soll aber nicht Bestandteil dieses Beispielssein
105
106 // Anwendung wird beendet
107
108 }
109
110 /// <summary>
111 /// Diese Methode wird aufgerufen, wenn die Überwachung eine neue E-Mail erhält.
112 /// Achtung: Invoke bei Zugriff auf den GUI-Thread nötig, da Hintergrund-Task.
113 /// </summary>
114 static void OnNeueEMail( object sender, NeueEMailArgs e )
115 {
116 Console.WriteLine( "[!!!] Neue EMail: Absender: " + e.Absender + "- Betreff: " + e.Betreff );
117 }
118 }

Comments