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
button.Click = Delegates.AutoUnsubscribe(
(sender, args) =>
{
// 此处添加仅执行一次的代码
},
handler => button.Click -= handler);
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