使用 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 表达式时删除附加的事件处理程序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Apollo Server 异步附加到 Lambda 处理程序?