有没有办法判断事件处理程序是否已添加到对象?我正在将对象列表序列化为 session 状态/ session 状态,以便我们可以使用基于 SQL 的 session 状态...当列表中的对象更改了属性时,需要对其进行标记,事件处理程序之前已正确处理.但是,现在当对象被反序列化时,它没有获得事件处理程序。
出于轻微的烦恼,我只是将事件处理程序添加到访问该对象的 Get 属性。它现在被调用了,这很棒,除了它被调用了 5 次,所以我认为每次访问对象时处理程序都会不断添加。
忽略它确实足够安全,但我宁愿通过检查是否已添加处理程序来使其更清晰,所以我只这样做一次。
这可能吗?
编辑:我不一定能完全控制添加的事件处理程序,因此仅检查 null 是不够的。
最佳答案
我最近遇到了类似的情况,我只需要为一个事件注册一次处理程序。我发现您可以安全地先注销,然后再注册,即使处理程序根本没有注册:
myClass.MyEvent -= MyHandler;
myClass.MyEvent += MyHandler;
请注意,每次注册处理程序时都这样做将确保您的处理程序仅注册一次。 对我来说这听起来是一个很好的练习 :)
关于c# - 是否已添加事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/136975/