如何删除所有eventhandler

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何删除所有eventhandler相关的知识,希望对你有一定的参考价值。

让我们说我们有一个代表

public delegate void MyEventHandler(string x);

和一个事件处理程序

public event MyEventHandler Something;

我们添加了多个事件..

for(int x = 0; x <10; x++)  
{
   this.Something += HandleSomething;
}

我的问题是..如何从事件处理程序中删除所有方法,假设一个人不知道它已被添加10次(或更多或更少)次?

答案

只需将活动设置为null

this.Something = null;

它将取消注册所有事件处理程序。

另一答案

作为伪想法:

C#5 <

class MyDelegateHelperClass{
    public static void RemoveEventHandlers<TModel, TItem>(MulticastDelegate m, Expression<Func<TModel, TItem>> expr) {


                EventInfo eventInfo= ((MemberExpression)expr.Body).Member as EventInfo;


                Delegate[] subscribers = m.GetInvocationList();

                Delegate currentDelegate;

                for (int i = 0; i < subscribers.Length; i++) {

                    currentDelegate=subscribers[i];
                    eventInfo.RemoveEventHandler(currentDelegate.Target,currentDelegate);

                }
            }
}

用法:

 MyDelegateHelperClass.RemoveEventHandlers(MyDelegate,()=>myClass.myDelegate);

C#6

public static void RemoveEventHandlers(this MulticastDelegate m){

        string eventName=nameof(m);

        EventInfo eventInfo=m.GetType().ReflectingType.GetEvent(eventName,BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);


        Delegate[] subscribers = m.GetInvocationList();

        Delegate currentDelegate;

        for (int i = 0; i < subscribers.Length; i++) {

            currentDelegate=subscribers[i];
            eventInfo.RemoveEventHandler(currentDelegate.Target,currentDelegate);

        }

    }

用法:

MyDelegate.RemoveEventHandlers();

以上是关于如何删除所有eventhandler的主要内容,如果未能解决你的问题,请参考以下文章

如何删除使用片段管理器添加的所有片段?

为 UIBarButtonItem 添加/删除 EventHandler

如何将 eventHandlers 和 uploadEvntHandlers 与 angularjs 1 http 请求一起使用?

当sqlite android片段中的数据更改或删除时如何刷新recyclerview?

Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段

Android,如何从 Google Map V2 中删除所有标记?