Méthode pour se désabonner du gestionnaire d'événements lambda en c #
]En C #, les expressions Lambda anonymes fournissent un moyen pratique de créer des gestionnaires d'événements. Cependant, un problème commun est: comment supprimer ou se désabonner à ces gestionnaires d'événements.
La spécification C # ne garantit pas que deux codes ont les mêmes expressions lambda qui produisent des délégués égaux. Pour garantir une réussite réussie, il est recommandé de stocker explicitement les instances déléguées.
Utilisez la méthode éventille nommée
]La manière la plus directe est de définir une méthode et de l'attribuer en tant que gestionnaire d'événements:
public void ShowWoho(object sender, EventArgs e)
{
MessageBox.Show("Woho");
}
...
button.Click = ShowWoho;
...
button.Click -= ShowWoho;
Stockage des variables à l'aide du délégué
]Pour créer un gestionnaire d'événements auto-assuré à l'aide d'une expression lambda, vous pouvez utiliser la variable de stockage du délégué:
EventHandler handler = null;
handler = (sender, args) =>
{
button.Click -= handler; // 取消订阅
// 在此处添加仅执行一次的代码
};
button.Click = handler;
Utilisez la méthode d'assistance
Bien que les méthodes d'assistance ne puissent pas être utilisées pour encapsuler les gestionnaires d'événements en raison des limitations de représentation des événements, les délégués génériques peuvent fournir des solutions:
button.Click = Delegates.AutoUnsubscribe(
(sender, args) =>
{
// 此处添加仅执行一次的代码
},
handler => button.Click -= handler);
En suivant ces méthodes, les développeurs peuvent supprimer efficacement les gestionnaires d'événements Lambda, assurant une gestion et un contrôle appropriés des événements sur le cycle de vie d'abonnement de l'événement.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3