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

标签 c# .net asp.net

有没有办法判断事件处理程序是否已添加到对象?我正在将对象列表序列化为 session 状态/ session 状态,以便我们可以使用基于 SQL 的 session 状态...当列表中的对象更改了属性时,需要对其进行标记,事件处理程序之前已正确处理.但是,现在当对象被反序列化时,它没有获得事件处理程序。

出于轻微的烦恼,我只是将事件处理程序添加到访问该对象的 Get 属性。它现在被调用了,这很棒,除了它被调用了 5 次,所以我认为每次访问对象时处理程序都会不断添加。

忽略它确实足够安全,但我宁愿通过检查是否已添加处理程序来使其更清晰,所以我只这样做一次。

这可能吗?

编辑:我不一定能完全控制添加的事件处理程序,因此仅检查 null 是不够的。

最佳答案

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

myClass.MyEvent -= MyHandler;
myClass.MyEvent += MyHandler;

请注意,每次注册处理程序时都这样做将确保您的处理程序仅注册一次。 对我来说这听起来是一个很好的练习 :)

关于c# - 是否已添加事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/136975/

相关文章:

c# - POST Controller 操作方法具有 NULL ViewModel 参数

c# - 使用图形 API 查询 Azure AD

c# - 尽管有效的 XPath 查询,iterator.MoveNext() 返回 false

c# - 创建类型为IList <>的类字段?

c# - 如何在 C# (Winforms) 中的 DataGridView 中添加进度条列

jquery - 为什么 jquery.validate 似乎不适用于用户控件?

php - 我已经将我的站点从 PHP 更改为 ASP?现在如何处理我的旧网址

c# - 线程池异常

c# - 图形布局和重新排列

c# - .Net Core 2.0 Windows 服务