Heim > Backend-Entwicklung > C++ > Wie kann ich Lambda-Ereignishandler in C# abbestellen?

Wie kann ich Lambda-Ereignishandler in C# abbestellen?

Linda Hamilton
Freigeben: 2025-01-20 09:41:09
Original
231 Leute haben es durchsucht

How to Unsubscribe Lambda Event Handlers in C#?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage