Maison > développement back-end > C++ > Comment se désabonner des gestionnaires d'événements Lambda en C# ?

Comment se désabonner des gestionnaires d'événements Lambda en C# ?

Barbara Streisand
Libérer: 2025-01-20 09:46:09
original
692 Les gens l'ont consulté

How to Unsubscribe from Lambda Event Handlers in C#?

Supprimer le gestionnaire d'événements Lambda en C#

En C#, les expressions Lambda fournissent un moyen concis de définir des gestionnaires d'événements simples. Par exemple, s'abonner à un événement de clic à l'aide d'une expression Lambda est très simple :

<code class="language-csharp">button.Click += (s, e) => MessageBox.Show("Woho");</code>
Copier après la connexion

Mais comment puis-je me désinscrire ultérieurement de cet événement ?

Utilisez un délégué pour vous désabonner

La spécification C# indique que les expressions Lambda et les délégués anonymes ne génèrent pas toujours le même délégué. Par conséquent, pour garantir un désabonnement fiable, vous pouvez suivre explicitement l'instance de délégué utilisée :

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

button.Click += handler;
...
button.Click -= handler;</code>
Copier après la connexion

Utiliser des méthodes indépendantes

Si vous ne souhaitez pas utiliser de délégué, vous pouvez définir une méthode distincte pour le gestionnaire d'événements :

<code class="language-csharp">public void ShowWoho(object sender, EventArgs e)
{
     MessageBox.Show("Woho");
}

...

button.Click += ShowWoho;
...
button.Click -= ShowWoho;</code>
Copier après la connexion

Gestionnaire Lambda auto-supprimant

Si vous souhaitez utiliser une expression Lambda pour créer un gestionnaire d'événements auto-supprimant, vous pouvez référencer le délégué dans l'expression Lambda. Cependant, vous devez d'abord affecter la variable à null :

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

Utiliser la classe déléguée pour l'encapsulation

Il est possible d'encapsuler la fonctionnalité d'auto-suppression dans une classe de délégué, mais cela peut être plus compliqué en raison de la nature abstraite de l'événement :

<code class="language-csharp">button.Click += Delegates.AutoUnsubscribe<EventHandler>((sender, args) =>
{
    // 此处的单次执行代码
}, handler => button.Click -= handler);</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal