与此问题相关, Check if an event already exists
但区别在于我只想知道某个特定方法是否附加到该事件。因此可能会附加其他方法,但我只是想知道某个特定方法是否存在。
我的环境是dotnet 4.0中的C#。
E.g。
Event += MyMethod1;
Event += MyMethod2;
// Some code
if (MyMethod1IsAttachedToEvent())
{
// Achieved goal
}
这可能吗?
答案 0 :(得分:19)
event 关键字是为了阻止您做您想做的事情而明确发明的。它使事件的委托对象不可访问,因此没有人可以搞乱事件处理程序。
答案 1 :(得分:2)
Event.GetInvocationList().Any(x => x.Method.Name.Equals("yourmethodname"));
答案 2 :(得分:2)
foreach ( Delegate existingHandler in this.EventHandler.GetInvocationList() )
{
if ( existingHandler == prospectiveHandler )
{
return true;
}
}
使用GetInvocationList
方法遍历代理。
答案 3 :(得分:1)
最新答案在这里。我相信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();
}