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

是否已添加事件处理程序?

是否已添加事件处理程序?

慕尼黑8549860 2019-08-30 17:04:01
有没有办法判断是否已将事件处理程序添加到对象中?我正在将对象列表序列化为进入/退出会话状态,因此我们可以使用基于SQL的会话状态...当列表中的对象更改了属性时,需要对其进行标记,事件处理程序在此之前正确处理。但是现在当对象被反序列化时,它没有得到事件处理程序。在轻微的烦恼中,我刚刚将事件处理程序添加到访问该对象的Get属性中。它现在被调用,这很好,除了它被调用5次,所以我认为处理程序只是在每次访问对象时都会被添加。它真的很安全,只是忽略,但我宁愿通过检查处理程序是否已被添加来使它更清洁,所以我只这样做了一次。那可能吗?编辑:我不一定完全控制添加什么事件处理程序,所以只检查null是不够的。
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

我最近遇到了类似的情况,我只需要为事件注册一次处理程序。我发现您可以先安全取消注册,然后再次注册,即使处理程序根本没有注册:


myClass.MyEvent -= MyHandler;

myClass.MyEvent += MyHandler;

请注意,每次注册处理程序时执行此操作将确保您的处理程序只注册一次。听起来对我来说是一个很好的做法:)


查看完整回答
反对 回复 2019-08-30
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

如果这是唯一的处理程序,您可以检查事件是否为null,如果不是,则添加处理程序。


我认为您可以安全地使用您的处理程序调用 - =即使它没有添加(如果没有,您可以捕获它) - 确保它在添加之前不在那里。


查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 483 浏览

添加回答

举报

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