猿问

请教一下关于C#清除事件的问题,求解释~

1.怎么判断事件上挂接有函数没有?
2.怎么清除事件上挂接的函数呢?
3.怎么全部清空呢?有时候不知道上面挂接了哪些处理函数.

狐的传说
浏览 740回答 2
2回答

万千封印

关于如何清空对象事件,你可以尝试使用如下方法,首先,你需要建立一个委托组 用以注册当前上下文所需要处理的所有方法,并且在适当的时候进行初始化.EventHandler[] ehNothings = new EventHandler[] { new EventHandler(button1_Click) };你可以使用Type.GetEvents()方法获取该类型的所有事件,同时,使用EventInfo 对象的GetRemoveMethod方法创建一个移除事件对象,调用该对象并使之在委托组内循环,移除当前对象的对应事件代码.Type myType = this.button1.GetType();System.Reflection.EventInfo[] events = myType.GetEvents();foreach (EventInfo eventInfo in events){MethodInfo methodInfo = eventInfo.GetRemoveMethod(true);foreach( EventHandler eh in ehNothings ){methodInfo.Invoke(this.button1, new object[] { eh });}}当然,本代码段是非安全的,对于非通用事件委托,你需要使用更多的委托组来处理.希望 你能找到更安全有效的方法.

ITMISS

答1:判断事件函数是否为空(null)即可知道有没有事件处理函数答2:添加使用 += 操作符号 去掉使用 -= 操作符号答3:如果你没有自己的侦听器集合的话,不需要进行此操作,c#本来就是托管代码,程序结束时候会自动析构。 你自己写的不一定有.net本身提供的性能好,所以不需要考虑这个(或者你的业务有特殊情况?可以提出来探讨一下)。
随时随地看视频慕课网APP
我要回答