我需要将参数(在 C# 中)传递给事件处理程序,然后能够分离事件处理程序。
我附加事件处理程序并传递参数:
_map.MouseLeftButtonUp += (sender, e) => _map_MouseLeftButtonUp2(sender, e, showResultsWindow);
该事件按预期调用。我尝试分离事件处理程序:
_map.MouseLeftButtonUp -= (sender, e) => _map_MouseLeftButtonUp2(sender, e, showResultsWindow);
代码执行没有错误,但似乎没有分离。
如果我以更传统的方式附加事件处理程序(不传递参数):
_map.MouseLeftButtonUp+=_map_MouseLeftButtonUp;
并分离
_map.MouseLeftButtonUp -= _map_MouseLeftButtonUp;
一切都按预期进行
通过更传统的方式分离事件处理程序(带有参数)
_map.MouseLeftButtonUp -= _map_MouseLeftButtonUp2;
给我一个错误,说代表不匹配(这是有道理的)
所以我的问题是:为什么当我传递参数时事件处理程序没有真正分离,有没有办法避免这个问题。
当您创建 lambda(匿名)函数时,您实际上每次都在创建一个新函数。
前两行不起作用的原因是它们是两个完全不同的函数,只是恰好执行相同的操作。正如您已经发现的那样,正确的分离方法是订阅和取消订阅函数。
另一种可能不值得的替代方案是将 lambda 保存到变量中。
Action<object, MouseButtonEventArgs> myEventMethod = (sender, e) => _map_MouseLeftButtonUp2(sender, e, showResultsWindow);
_map.MouseLeftButtonUp += myEventMethod;
// ...
_map.MouseLeftButtonUp -= myEventMethod;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)