[英]Check if a specific event handler method already attached
与此问题相关, 检查事件是否已存在
但不同的是我只想知道事件是否附加了特定的方法。 所以可能附加了其他方法,但我只想知道是否存在特定的方法。
我的环境是 dotnet 4.0 中的 C#。
例如
Event += MyMethod1;
Event += MyMethod2;
// Some code
if (MyMethod1IsAttachedToEvent())
{
// Achieved goal
}
这可能吗?
foreach ( Delegate existingHandler in this.EventHandler.GetInvocationList() )
{
if ( existingHandler == prospectiveHandler )
{
return true;
}
}
使用GetInvocationList
方法遍历委托。
Event.GetInvocationList().Any(x => x.Method.Name.Equals("yourmethodname"));
迟到的答案在这里。 我相信 Parimal Raj 的答案是正确的,因为我找不到直接访问事件的方法。 但是,我创建了两种方法来解决这个问题:
添加前删除。 如果该方法不存在,我在尝试删除不存在的方法时不会收到错误消息。 这样您就可以确保调用列表只调用 method1 一次。
Event -= MyMethod1; Event += MyMethod1;
您要向其添加事件的对象可能具有 .Tag 属性。 您可以使用标签来存储有关您已添加的方法的信息。 这里我只有一种方法,所以我只需要检查Tag是否为空。 但是可以通过这种方式处理更复杂的场景:
if(control.Tag == null) { //ony added once, when tag is null control.TextChanged += new EventHandler(validate); control.Tag = new ControlTag(); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.