与此问题相关, 检查事件是否已存在
但不同之处在于我只想知道事件是否附加了特定方法。所以可能还有其他方法,但我只想知道是否存在特定的方法。
我的环境是 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 是否为null。但更复杂的场景可以这样处理:
if(control.Tag == null)
{
//ony added once, when tag is null
control.TextChanged += new EventHandler(validate);
control.Tag = new ControlTag();
}