gpt4 book ai didi

c# - 如何安全地触发事件

转载 作者:行者123 更新时间:2023-11-30 18:49:32 25 4
gpt4 key购买 nike

当事件没有订阅者时,我如何确保在触发事件时不会抛出异常。

 // Delegate declaration
public delegate void _delDisplayChange(object sender,string option);

// Event declaration
public event _delDisplayChange DisplayChange;

//throwing the event
DisplayChange(this, "DISTRIBUTION");

最佳答案

这是推荐的方法:

protected void RaiseDisplayChanged(string message)
{
var handlers = DisplayChange;
if(handlers != null)
handlers(this, message);
}

在检查之前复制事件处理程序枚举有两件事:

  1. 如果 DisplayChange 处理程序在检查和触发之间变为 null,则您不会死
  2. 如果监听器在枚举 DisplayChange 列表时修改它,您就不会遇到奇怪的情况。

此外,您没有使用标准事件协议(protocol)。您的代表应该是:

public delegate void DisplayChangeDelegate(object sender, OptionsEventArgs args);

OptionsEventArgs 派生自 EventArgs。更进一步,在 .Net 3.5 中,您永远不应该这样定义委托(delegate)。相反,您应该只定义您的事件:

public event EventHandler<OptionsEventArgs> DisplayChanged;

我想通过定义这个类更进一步:

public class EventArgs<T> : EventArgs
{
public T Payload { get; private set }
public EventArgs(T payload)
{
Payload = payload;
}
}

那么,你不需要定义 OptionsEventArgs:

public event EventHandler<EventArgs<string>> DisplayChanged;

只是一些需要考虑的事情......

关于c# - 如何安全地触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1868877/

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