Heim > Backend-Entwicklung > C++ > Wie kann ich mich von Lambda-Ereignishandlern in C# abmelden?

Wie kann ich mich von Lambda-Ereignishandlern in C# abmelden?

Barbara Streisand
Freigeben: 2025-01-20 09:46:09
Original
692 Leute haben es durchsucht

How to Unsubscribe from Lambda Event Handlers in C#?

Lambda-Ereignishandler in C# entfernen

In C# bieten Lambda-Ausdrücke eine übersichtliche Möglichkeit, einfache Ereignishandler zu definieren. Das Abonnieren eines Klickereignisses mithilfe eines Lambda-Ausdrucks ist beispielsweise sehr einfach:

<code class="language-csharp">button.Click += (s, e) => MessageBox.Show("Woho");</code>
Nach dem Login kopieren

Aber wie kann ich mich nachträglich von dieser Veranstaltung abmelden?

Verwenden Sie Delegat, um sich abzumelden

Die C#-Spezifikation besagt, dass Lambda-Ausdrücke und anonyme Delegaten nicht immer denselben Delegaten generieren. Um eine zuverlässige Abmeldung zu gewährleisten, können Sie daher die verwendete Delegate-Instanz explizit verfolgen:

<code class="language-csharp">EventHandler handler = (s, e) => MessageBox.Show("Woho");

button.Click += handler;
...
button.Click -= handler;</code>
Nach dem Login kopieren

Verwenden Sie unabhängige Methoden

Wenn Sie keinen Delegaten verwenden möchten, können Sie eine separate Methode für den Ereignishandler definieren:

<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

Selbstentfernender Lambda-Handler

Wenn Sie einen Lambda-Ausdruck verwenden möchten, um einen selbstentfernenden Ereignishandler zu erstellen, können Sie im Lambda-Ausdruck auf den Delegaten verweisen. Allerdings müssen Sie der Variablen zunächst null zuweisen:

<code class="language-csharp">EventHandler handler = null;
handler = (sender, args) =>
{
    button.Click -= handler; // 取消订阅
    // 在此处添加您的单次执行代码
};
button.Click += handler;</code>
Nach dem Login kopieren

Verwenden Sie die Delegate-Klasse zur Kapselung

Es ist möglich, Selbstentfernungsfunktionen in einer Delegate-Klasse zu kapseln, dies kann jedoch aufgrund der abstrakten Natur des Ereignisses komplizierter sein:

<code class="language-csharp">button.Click += Delegates.AutoUnsubscribe<EventHandler>((sender, args) =>
{
    // 此处的单次执行代码
}, handler => button.Click -= handler);</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich mich von Lambda-Ereignishandlern in C# abmelden?. 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