2 回答
TA贡献1891条经验 获得超3个赞
关于如何清空对象事件,你可以尝试使用如下方法,
首先,你需要建立一个委托组 用以注册当前上下文所需要处理的所有方法,并且在适当的时候进行初始化.
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 });
}
}
当然,本代码段是非安全的,对于非通用事件委托,你需要使用更多的委托组来处理.希望 你能找到更安全有效的方法.
TA贡献1871条经验 获得超8个赞
答1:
判断事件函数是否为空(null)即可知道有没有事件处理函数
答2:
添加使用 += 操作符号 去掉使用 -= 操作符号
答3:
如果你没有自己的侦听器集合的话,不需要进行此操作,c#本来就是托管代码,程序结束时候会自动析构。 你自己写的不一定有.net本身提供的性能好,所以不需要考虑这个(或者你的业务有特殊情况?可以提出来探讨一下)。
- 2 回答
- 0 关注
- 738 浏览
添加回答
举报