DotNet · 2022年8月1日

在注册事件绑定事件前检查事件处理程序是否已注册

解决思路,是在事件所属类内部,使用GetInvocationList()方法,来获取已关联的事务,然后进行判断,注意,这个方法在事件类外部不能使用
源码示例:
public void Test(Delegate delegateToTest)
{
   if (X.EventX != null)
   {
       foreach (Delegate existingHandler in X.EventX.GetInvocationList())
       {
           if (existingHandler == delegateToTest)
           {
               // registered
           }
       }
    }
}

当然,没什么特殊要求的情况下,简单粗暴的处理方式也可以,就是在绑定事件之前,先解绑一次
objectX.EventX -= HandlerB; 
objectX.EventX += HandlerB;

最新电影,电视剧,尽在午夜剧场

电影电视剧午夜不寂寞