Event-Handler: Einfacher als gedacht


Thomas Wölfer
Thomas Wölfer

22. November 2004


Angenommen man hat einen Eventhandler den man an ein Event geknüpft hat - zum Beispiel einen Idle-Handler der die aktuelle Sekunde anzeigt:

private void button1_Click(object sender, EventArgs e)
{
   Application.Idle += new EventHandler(Application_Idle);
}

void Application_Idle(object sender, EventArgs e)
{
   this.label1.Text = DateTime.Now.Second.ToString();
}

Das ärgerliche ist dabei natürlich die Tatsache, das man den Eventhandler auch irgendwann wieder loswerden muss, denn ansonsten verschwindet das Objekt in dem der Handler implementiert ist nie wieder. Zumindest nicht bis zum Ende der Anwendung :-)

Bis vor kurzem war ich davon ausgegangen, das man sich den Handler dazu eben merken muss, um ihn dann an 'passender' Stelle wieder 'abzuziehen'. Das ist extrem lästig, weil man dann eben immer eine zusätzliche Variable mit sich herumschleppen muss.

Nur war meine bisherige Überlegung gar nicht korrekt - man muss sich das Ding nicht merken. Statt dessen kann man einfach einen neuen (passenden, und gleichen) Handler dazu verwenden. Mit anderen Worten: Beim Beispiel von oben wird man den Handler auch wie folgt wieder los:

private void button2_Click(object sender, EventArgs e)
{
   Application.Idle -= new EventHandler(Application_Idle);
}