簡體   English   中英

為什么訂閱事件始終為空?

[英]Why is subscribed event always null?

我在以下位置聲明對事件的訂閱:

public class MainClass
{
    public void btndel_bar_Click(object sender, RoutedEventArgs e)
    {
        SomeClass sc = new SomeClass();
        sc.FieldUpdate += new SomeClass.FieldUpdateHandler(sc_FieldUpdate);
    }

    void sc_FieldUpdate(object sender, ValueEventArgs e)
    {
        MessageBox.Show(e.Smth_property);
    }
}

這是我想聽的事件:

public class Someclass
{
    public delegate void FieldUpdateHandler(object sender, ValueEventArgs e);
    public event FieldUpdateHandler FieldUpdate;

    void Somemethod()
    {
        string str = "Steel";
        ValueEventArgs args = new ValueEventArgs(str);
        FieldUpdate(this, args);   
    }
}

承載數據的類:

public class ValueEventArgs : EventArgs
{
    private string smth;

    public ValueEventArgs(string smth)
    {
        this.smth = smth;
    }

    public string Smth_property
    {
        get { return smth; }
    }
}

我總是有FieldUpdate=null 怎么解決呢?

您在構造函數中調用Somemethod() ,然后調用代碼才有機會添加事件處理程序。
因此,該事件仍然為空。

創建SomeClass對象后,事件將重新初始化。

將您的事件設為靜態,以便SomeClass的多個對象可以共享它

public static event FieldUpdateHandler FieldUpdate;

我已經閱讀了有關委托人和事件的文章,閱讀后我一直想着要再次進行所有操作。 我又做了一次,一切正常! 因此,一開始我做錯了什么。

暫無
暫無

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

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