gpt4 book ai didi

c# - 你如何在 C# 中引发事件?

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

股票数据下载类有一个 BarList,它可以向其中添加新柱或更新并在最后一个柱实时更改时替换最后一个柱。每当此下载类向 BarList 类添加新栏或更改其最后一个栏时,它也会调用其 NotifyOnBarsAdded 或 NotifyOnBarChanges。我正在尝试获取通知方法来引发事件,以便处理这些事件的 Canvas 类可以根据调用的通知方法重绘最后一个柱形图或整个图表。问题是,当调用 NotifyOnBarsAdded 类时,我在尝试引发事件时得到 NullReferenceException。我正在引发这样的事件:NotifyBarAdded(this, EventArgs.Empty)。这是不正确的吗?这是代码:

public class BarList : List< Bar >
{
private int historyHandle;
public event EventHandler NotifyBarChanged;
public event EventHandler NotifyBarAdded;

public BarList(int historyHandle)
{
this.historyHandle = historyHandle;
}

public BarList()
{
// TODO: Complete member initialization
}

public void NotifyOnBarChange()
{
NotifyBarChanged(this,EventArgs.Empty);
}

public void NotifyOnBarsAdded()
{
NotifyBarAdded(this, EventArgs.Empty);
}

public long handle { get; set; }


}

最佳答案

你所做的是正确的,除了你必须考虑到可能没有附加的事件处理程序,这会给你一个 NullReferenceException。您要么必须在调用之前插入一个 null 守卫,要么像这样使用一个空委托(delegate)来初始化事件。

检查是否为空:

var local = NotifyBarAdded;
if(local != null) local(this, EventArgs.Empty);

使用空委托(delegate)进行初始化将允许您保留已有的调用(即无需检查是否为空)。

public event EventHandler NotifyBarAdded = delegate {};

关于c# - 你如何在 C# 中引发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4039790/

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