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; 是参考吗? if (temp != null) temp(this,new MyEventArgs(val)); } 解决方法
这是一个偏执的事情与线程有关.如果另一个线程在您检查它为null后取消订阅最后一个处理程序,则可能会变为null,并导致异常.由于代表是不可变的,将代理的快照捕获到变量中会阻止它发生.
当然,它确实有另一个副作用,你可以(而不是)最终提出事件反对一个对象,认为它已经取消订阅… 但是要强调 – 这只是当多个线程订阅/取消订阅对象时才是一个问题,这是一个罕见的,而不是完全可取的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |