c# – 有关价值/参考类型事件的问题

前端之家收集整理的这篇文章主要介绍了c# – 有关价值/参考类型事件的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在MSDN上,我找到以下内容
public event EventHandler<MyEventArgs> SampleEvent;

public void DemoEvent(string val)
{
// Copy to a temporary variable to be thread-safe.
    EventHandler<MyEventArgs> temp = SampleEvent;

是参考吗?
如果是这样,我不明白它的含义,因为当SampleEvent变为null时,temp也是如此

if (temp != null)
        temp(this,new MyEventArgs(val));
}

解决方法

这是一个偏执的事情与线程有关.如果另一个线程在您检查它为null后取消订阅最后一个处理程序,则可能会变为null,并导致异常.由于代表是不可变的,将代理的快照捕获到变量中会阻止它发生.

当然,它确实有另一个副作用,你可以(而不是)最终提出事件反对一个对象,认为它已经取消订阅

但是要强调 – 这只是当多个线程订阅/取消订阅对象时才是一个问题,这是一个罕见的,而不是完全可取的.

猜你在找的C#相关文章