C#清除事件

来源:百度知道 编辑:UC知道 时间:2024/05/26 07:26:59
1.怎么判断事件上挂接有函数没有?
2.怎么清除事件上挂接的函数呢?
3.怎么全部清空呢?有时候不知道上面挂接了哪些处理函数.

答1:
判断事件函数是否为空(null)即可知道有没有事件处理函数

答2:
添加使用 += 操作符号 去掉使用 -= 操作符号

答3:
如果你没有自己的侦听器集合的话,不需要进行此操作,c#本来就是托管代码,程序结束时候会自动析构。 你自己写的不一定有.net本身提供的性能好,所以不需要考虑这个(或者你的业务有特殊情况?可以提出来探讨一下)。

if(object.event == null)
object.event=null

关于如何清空对象事件,你可以尝试使用如下方法,
首先,你需要建立一个委托组 用以注册当前上下文所需要处理的所有方法,并且在适当的时候进行初始化.
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 });
}
}

当然,本代码段是非安全的,对于非通用事件委托,你需要使用更多的委托组来处理.希望 你能找到更安全有效的方法.