gpt4 book ai didi

c# - 为什么要通过变量引用事件?

转载 作者:太空狗 更新时间:2023-10-30 00:33:20 26 4
gpt4 key购买 nike

我一直在其他人的代码中看到这种调用事件的模式:

void OnMyEvent()
{
var myEvent = MyEvent;

if (myEvent != null)
myEvent(this, EventArgs.Empty);
}

使用变量来引用事件 MyEvent 而不是直接使用 MyEvent(this, EventArgs.Empty) 有什么好处?

最佳答案

在多线程应用程序中,事件可能会在调用此方法的过程中取消订阅。

如果未以这种方式复制事件处理程序,这可能会导致 NullReferenceException

void OnMyEvent()
{
if (MyEvent!= null) // Thread A checks event
{ // Thread B unsubscribes _last_ handler
MyEvent(this, EventArgs.Empty); // Boom!
}
}

但是有:

void OnMyEvent()
{
var myEvent = MyEvent; // Thread A gets _copy_ of invocation list
if (myEvent != null) // Using copy, so no problem
{ // Thread B unsubscribes _last_ handler
myEvent(this, EventArgs.Empty); // Still using copy, so no problem
}
}

关于c# - 为什么要通过变量引用事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12420934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com