c#语言中的事件处理程序
本文关键字:事件处理 程序 语言 | 更新日期: 2023-09-27 18:11:17
class Plane
{
public event EventHandler Land;
protected void OnLand()
{
if ( null != Land )
{
Land( this, null );
}
}
}
事件处理程序的最佳实践是:
EventHandler temp = Land;
if ( null != temp )
{
temp( this, null );
}
这真的有必要吗?在什么情况下temp和Land会不同?
在多线程访问情况下,我相信。如果不缓存引用,其他线程可以在保护之后但在触发之前将其清空。
如果您有多个线程并发修改Land
当在测试和引发之间时,最后一个处理程序被另一个线程从列表中删除。
当事件的调用列表发生变化时,它将被复制,并且temp引用仍将保留原始列表。
参见:c#事件和线程安全