执行后清除C#事件?

时间:2011-09-22 18:49:02

标签: c# events

说我有以下代码:

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.有竞争条件的机会吗?

2 个答案:

答案 0 :(得分:7)

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

我的建议:如有疑问,请写一个小型测试应用程序,然后......测试一下。

更新:我在发布之前对其进行了测试。 (回应弊端。)

答案 1 :(得分:0)

从活动中unsubscribe使用event-=delegate,因此您确定该资源是免费的。即使是通过官方的Microsoft文档,根据我自己的经验,特别是在大型复杂项目中,不必要的事件嫌疑人是内存泄漏的来源。所以明确地unsubscribe来自他们。