执行后清除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.:是否有机会出现竞态条件?

执行后清除c#事件

是的,它会清除它。因为事件在同一个线程中同步触发,所以不应该存在竞争条件。

我的建议:当你有疑问的时候,写一个小的测试应用程序…好吧,测试一下。

更新:我在发布前测试了它。

从事件使用event-=delegateunsubscribe,因此您可以确定资源是空闲的。即使在微软官方文档中没有必要这样做,但根据我自己的经验,特别是在大型复杂项目中,不必要的事件订户是内存泄漏的根源。所以unsubscribe从他们明确。