[英]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.