Ereignisse einsetzen

Ereignisse sind tägliches Brot jedes C# Entwicklers. Vor allem bei der Entwicklung von Benutzeroberflächen, wird hauptsächlich mit Ereignissen gearbeitet. Möchte man z.B. bestimmten Code ausführen, wenn auf einem Windows-Fenster eine Schaltfläche angelickt wird, muss man dafür das Click-Ereignis der Schaltfläche abonnieren. Das hat jeder schon mal gemacht.

button1.Click += new EventHandler(button1_Click);

...

private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show("Schaltfläche angeklickt.");
}

Das ist nichts Neues. Aber wie funktioniert die Ereignisbehandlung, wenn die Komponente, welche das Ereignis anbietet, auf einem anderen Computer läuft?
Mit den .NET Bordmitteln für verteilte Anwendungen WCF und .NET Remoting geht das nicht ohne Weiteres. Richtige Ereignisse, wie oben beschrieben, lassen sich mit WCF z.B. standardmäßig gar nicht abbilden. Um eine vergleichbare Funktionalität zu bekommen, müsste man da einen sog. Duplex Contract implementieren. Verglichen mit button1_Click ist das aber eine Menge Handarbeit.

Zyan dagegen macht Ereignisbehandlung im button1_Click-Stil ohne weiteres Zutun auch in verteilten Anwendungen möglich. Folgender Code läuft mit Zyan also ohne Probleme:

chatProxy = _connection.CreateProxy<IMiniChat>();
chatProxy.MessageReceived += new Action<string, string>(chatProxy_MessageReceived);

...

private void chatProxy_MessageReceived(string arg1, string arg2)
{
    MessageBox.Show(string.Format("{0} sagt: {1}", arg1, arg2));
}

Damit das Ereignisfeuerwerk übers Netzwerk eine gelungene Komposition wird, ist allerdings folgendes zu beachten:
Ereignisse funktionieren mit jedem ProtocolSetup.

Hier finden Sie eine kleine Beispielanwendung, die einen Chat mit Events implementiert: Chat-Beispielprojekt