6

如果我有注册和注销事件的经典方法(+= -=),是否还有一种方法可以查看现在是否已注册某些内容?

假设我有 2 种方法可以在一个 Timer 上注册。如果某些东西已经在 注册.Elapsed,我不希望其他任何东西注册(并且不希望某些东西注册多次)。

有什么方法可以查看当前注册到特定事件的方法吗?

4

2 回答 2

5

如果你真的想要这样的行为,我认为最好的选择是使用重载事件的 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;
       }
   }

}
于 2013-01-14T14:41:53.913 回答
1

您可以使用 GetInvocationList() 并依次获取计数

于 2013-01-14T14:40:04.060 回答