如果我有注册和注销事件的经典方法(+= -=),是否还有一种方法可以查看现在是否已注册某些内容?
假设我有 2 种方法可以在一个 Timer 上注册。如果某些东西已经在 注册.Elapsed
,我不希望其他任何东西注册(并且不希望某些东西注册多次)。
有什么方法可以查看当前注册到特定事件的方法吗?
如果你真的想要这样的行为,我认为最好的选择是使用重载事件的 add{} 和 remove{} 功能。
public class Foo
{
private EventHandler<ElapsedEventArgs> _elapsed;
public EventHandler<ElapsedEventArgs> Elapsed
{
add
{
if( _elapsed == null )
_elapsed += value;
else
throw new InvalidOperationException ("There is already an eventhandler attached to the Elapsed event.");
}
remove
{
_elapsed -= value;
}
}
}
您可以使用 GetInvocationList() 并依次获取计数