„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich Lambda -Event -Handler in C#abmelden?

Wie kann ich Lambda -Event -Handler in C#abmelden?

Gepostet am 2025-03-25
Durchsuche:619

How to Unsubscribe Lambda Event Handlers in C#?

In C#bieten anonyme Lambda -Ausdrücke eine bequeme Möglichkeit, Ereignishandler zu erstellen. Ein häufiges Problem ist jedoch: wie man diese Ereignishandler entfernen oder abhebt.

Die C# -Anspezifikation garantiert nicht, dass zwei Codes die gleichen Lambda -Ausdrücke haben, die gleiche Delegierte erzeugen. Um erfolgreiche Abmeldungen zu gewährleisten, wird empfohlen, explizit delegierte Instanzen zu speichern.

Verwenden Sie die benannte EventHandler -Methode

] Die direkteste Möglichkeit besteht darin, eine Methode zu definieren und sie als Ereignishandler zuzuweisen:

public void showwoho (Objektabsender, EventArgs e) { MessageBox.show ("woho"); } ... button.click = showwoho; ... button.click -= showwoho;
public void ShowWoho(object sender, EventArgs e)
{
    MessageBox.Show("Woho");
}

...

button.Click  = ShowWoho;
...
button.Click -= ShowWoho;
Variablen speichern mit Delegate

]] Um einen selbstverletzten Ereignishandler mit einem Lambda-Ausdruck zu erstellen, können Sie die Variable Delegate Speicher verwenden:

eventHandler handler = null; Handler = (Absender, Args) => { Button.click -= Handler; // Abbestellen // Code hinzufügen, der hier nur einmal ausgeführt wird }; button.click = Handler;
public void ShowWoho(object sender, EventArgs e)
{
    MessageBox.Show("Woho");
}

...

button.Click  = ShowWoho;
...
button.Click -= ShowWoho;
verwenden Helper -Methode

Obwohl Helfer -Methoden aufgrund von Ereignisdarstellungsbeschränkungen nicht zur Kapselung von Ereignishandlern verwendet werden können, können generische Delegierte Lösungen bereitstellen:

button.click = delegates.autounsubscribe ( (Absender, args) => { // Code hinzufügen, der nur einmal ausgeführt wird }, Handler => button.click -= Handler);
button.Click  = Delegates.AutoUnsubscribe(
    (sender, args) =>
    {
        // 此处添加仅执行一次的代码
    },
    handler => button.Click -= handler);
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3