使用 lambda 表达式时删除附加的事件处理程序 [重复]

Posted

技术标签:

【中文标题】使用 lambda 表达式时删除附加的事件处理程序 [重复]【英文标题】:Removing attached event handler when using lambda expression [duplicate] 【发布时间】:2020-01-12 22:14:19 【问题描述】:

当我附加简单的事件处理程序时,我可以这样做:

expandable_list_item_inspection_interface_btnCamera.Click -= Expandable_list_item_inspection_interface_btnCamera_Click;

我想删除一个已经附加的事件处理程序,以确保在 ExpandableListView 的适配器中以编程方式附加事件时不会多次调用 click 事件。但如果我附加这样的事件:

expandable_list_item_inspection_interface_btnCamera.Click -= (sender, e) => btnCamera_Click(sender, e, expandable_list_item_inspection_interface_btnImage1);
expandable_list_item_inspection_interface_btnCamera.Click += (sender, e) => btnCamera_Click(sender, e, expandable_list_item_inspection_interface_btnImage1);

尽管我首先删除了事件处理程序,然后添加了另一个,但该事件仍会被多次调用。我该如何防止这种情况?

【问题讨论】:

【参考方案1】:

你需要记住你这样使用的委托实例。

var handler = (sender, e) => btnCamera_Click(sender, e, expandable_list_item_inspection_interface_btnImage1);

然后像这样使用它附加和删除

expandable_list_item_inspection_interface_btnCamera.Click -= handler 
expandable_list_item_inspection_interface_btnCamera.Click += handler 

【讨论】:

以上是关于使用 lambda 表达式时删除附加的事件处理程序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无操作 lambda

将 lambda 表达式用于事件处理程序的最佳实践

如何删除事件处理程序并将其重新附加到 c# 中的控件?

如何将 Apollo Server 异步附加到 Lambda 处理程序?

为啥 AWS Lambda CFN S3 响应在删除事件时返回 403?

python tkinter, 通过lambda表达式传递参数到按钮的点击事件函数