加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:00:33 所属栏目:百科 来源:网络整理
导读:在MSDN上,我找到以下内容: public event EventHandlerMyEventArgs SampleEvent;public void DemoEvent(string val){// Copy to a temporary variable to be thread-safe. EventHandlerMyEventArgs temp = SampleEvent; 是参考吗? 如果是这样,我不明白它的
在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,并导致异常.由于代表是不可变的,将代理的快照捕获到变量中会阻止它发生.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读