执行后清除c#事件
本文关键字:事件 清除 执行 | 更新日期: 2023-09-27 18:09:29
假设我有以下代码:
public event EventHandler DatabaseInitialized = delegate {};
//a intederminant amount of subscribers have subscribed to this event...
// sometime later fire the event, then create a new event handler...
DatabaseInitialized(null,EventArgs.Empty);
//THIS LINE IS IN QUESTION
DatabaseInitialized = delegate {};
这会清除订阅者,用新的空默认值替换它吗?事件是否会在所有订阅者被清除之前通知他们?I.E.:是否有机会出现竞态条件?
是的,它会清除它。因为事件在同一个线程中同步触发,所以不应该存在竞争条件。
我的建议:当你有疑问的时候,写一个小的测试应用程序…好吧,测试一下。
更新:我在发布前测试了它。
从事件使用event-=delegate
到unsubscribe
,因此您可以确定资源是空闲的。即使在微软官方文档中没有必要这样做,但根据我自己的经验,特别是在大型复杂项目中,不必要的事件订户是内存泄漏的根源。所以unsubscribe
从他们明确。