当我试图引发事件时获得异常

本文关键字:异常 事件 | 更新日期: 2023-09-27 18:02:00

我得到了一个enum:

public enum sprog{
   dansk,
   svensk,
   norsk
}

在方法中,我将引发一个事件并使用枚举来携带信息:

public delegate void BrugerSprogChanged(Object sender, Sprog sprog);
class clazz
{
    public event BrugerSprogChanged brugerSprogChanced;
    public clazz(){}
    private void comboBoxDokumentSprog_SelectedIndexChanged(object sender, EventArgs e)
    {
        Sprog sprog = FindSprog((string)((ComboBox)sender).SelectedItem);
        dokumentSprogChanged(this, sprog); // <- here we have the problem
    }
}

当代码引发事件时,当调用documentsprogchanged (this, sprg)时,我得到一个异常:

*"NullReferenceException未被用户代码处理

对象引用未设置为对象"

"this"answers"sprog"不为空。

有什么建议吗?

简单的方法是去掉unem并使用整数/字符串代替,但这样我就会得到一些难看的代码。

通常要调用一个事件,你必须检查它的处理程序是否为null:

var handler = dokumentSprogChanged; // take a local reference
if (handler != null)
{
    dokumentSprogChanged(this, sprog);
}

这样你可以安全地提高它。

编辑

您需要像这样注册事件:

public event BrugerSprogChanged brugerSprogChanced;
....
brugerSprogChanced += class_brugerSprogChanced;
....
void class_brugerSprogChanced(object sender, EventArgs e)
{
    // handle there
}

当我试图引发事件时获得异常

试试这个:

class clazz
{
    public event BrugerSprogChanged brugerSprogChanced;
    public clazz(){}
    private void comboBoxDokumentSprog_SelectedIndexChanged(object sender, EventArgs e)
    {
        Sprog sprog = FindSprog((string)((ComboBox)sender).SelectedItem);
        if (dokumentSprogChanged != null)
        {
            dokumentSprogChanged(this, sprog); // <- here we have the problem
        }
    }
}