为什么订阅的事件总是为空?

时间:2013-09-01 11:36:01

标签: c# events

我在以下地址宣布订阅活动:

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。怎么解决?

3 个答案:

答案 0 :(得分:3)

在调用代码有机会添加事件处理程序之前,您在构造函数中调用Somemethod()
因此,该事件仍为空。

答案 1 :(得分:0)

您创建SomeClass对象时,您的活动将重新初始化。

使您的事件成为静态,以便SomeClass的多个对象可以共享它

public static event FieldUpdateHandler FieldUpdate;

答案 2 :(得分:0)

我读过有关代表和活动的文章,阅读后我总是想再次进行所有操作。我重新做了一遍,它的确有效!因此,当我在开头做的时候,我做错了。

相关问题