C#事件处理程序

时间:2010-09-29 23:07:06

标签: c# .net silverlight event-handling

有没有办法让附加事件处理程序的数量达到事件?问题是代码中的某个地方继续将处理程序附加到事件中,如何解决这个问题?

3 个答案:

答案 0 :(得分:10)

可以通过致电GetInvocationList()

获取所有订阅者的列表
public class Foo
{
    public int GetSubscriberCount()
    {
        var count = 0;
        var eventHandler = this.CustomEvent;
        if(eventHandler != null)
        {
            count = eventHandler.GetInvocationList().Length;
        }
        return count;
    }

    public event EventHandler CustomEvent;
}

答案 1 :(得分:0)

您可以实现自己的事件添加/删除方法:

private EventHandler _event;

public event EventHandler MyEvent
{
  add 
  { 
    if (_event == null) _event = value;
    _event += value; 
  }  

  remove 
  {
    if (_event != null) _event -= value;
  }
}

答案 2 :(得分:0)

您可以覆盖事件的添加和删除操作(+ =和 - =),如以下代码所示:

private int count = 0;
public event EventHandler MyEvent {
    add {
        count++;
        // TODO: store event receiver
    }
    remove {
        count--;
        // TODO: remove event receiver
    }
}