为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C# C
狐的传说 2021-11-18 15:11:36
1.怎么判断事件上挂接有函数没有?2.怎么清除事件上挂接的函数呢?3.怎么全部清空呢?有时候不知道上面挂接了哪些处理函数.
查看完整描述

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 });
}
}

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

查看完整回答
反对 回复 2021-11-23
?
ITMISS

TA贡献1871条经验 获得超8个赞

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

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

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

查看完整回答
反对 回复 2021-11-23
  • 2 回答
  • 0 关注
  • 639 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信