簡體   English   中英

嘗試引發事件時獲取異常

[英]Get exception when I try to raise an event

我得到一個枚舉:

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
    }
}

當代碼引發事件時,在調用dokumentSprogChanged(this,sprg)時出現異常:

*“ NullReferenceException未由用戶代碼處理

你調用的對象是空的”

“ this”和“ 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
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM