Methode zum Abbestellen des Lambda-Ereignishandlers in C#
In C# bieten anonyme Lambda-Ausdrücke eine bequeme Möglichkeit, Ereignishandler zu erstellen. Eine häufig gestellte Frage lautet jedoch: Wie kann man diese Event-Handler entfernen oder abbestellen?
Die C#-Spezifikation garantiert nicht, dass zwei Lambda-Ausdrücke mit demselben Code gleiche Delegaten erzeugen. Um eine erfolgreiche Abmeldung sicherzustellen, empfiehlt es sich, die Delegate-Instanz explizit zu hinterlegen.
Verwenden Sie benannte EventHandler-Methoden
Der einfachste Weg besteht darin, eine Methode zu definieren und sie als Event-Handler zuzuweisen:
<code class="language-csharp">public void ShowWoho(object sender, EventArgs e) { MessageBox.Show("Woho"); } ... button.Click += ShowWoho; ... button.Click -= ShowWoho;</code>
Verwenden Sie Delegaten zum Speichern von Variablen
Um einen selbstentfernenden Event-Handler mithilfe eines Lambda-Ausdrucks zu erstellen, können Sie einen Delegaten zum Speichern der Variablen verwenden:
<code class="language-csharp">EventHandler handler = null; handler = (sender, args) => { button.Click -= handler; // 取消订阅 // 在此处添加仅执行一次的代码 }; button.Click += handler;</code>
Hilfsmethoden verwenden
Während Hilfsmethoden aufgrund von Einschränkungen bei der Ereignisdarstellung nicht zum Kapseln von Ereignishandlern verwendet werden können, können generische Delegaten eine Lösung bieten:
<code class="language-csharp">button.Click += Delegates.AutoUnsubscribe<EventHandler>( (sender, args) => { // 此处添加仅执行一次的代码 }, handler => button.Click -= handler);</code>
Durch die Befolgung dieser Methoden können Entwickler Lambda-Ereignishandler effektiv entfernen und so eine ordnungsgemäße Ereignisverwaltung und Kontrolle über den Lebenszyklus des Ereignisabonnements gewährleisten.
Das obige ist der detaillierte Inhalt vonWie kann ich Lambda-Ereignishandler in C# abbestellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!