我希望我的C#代码在将值分配给对象时调用一个事件。

我到底需要怎么做?

class MyClass {

  ManualResetEvent mre;

  public MyClass() {
    mre = new ManualResetEvent(false);
    Data = null;
  }

  public object Data { get; set; }

  void DataSet(object sender, EventArgs e) {
    Console.WriteLine("object Data has been set.");
    mre.Set();
  }

}

代表似乎并不是我所需要的。一个事件,也许吗?如果是这样,我将如何编写此类事件?
MyClass mc;

void processA() {
  mc = new MyClass();
  mc.Data = GetDataFromLongProcess();
}

最佳答案

private object data;
public object Data {
    get { return data;}
    set {
        if(value != data) {
            data = value;
            OnDataChanged();
        }
    }
}
protected virtual void OnDataChanged() {
    EventHandler handler = DataChanged;
    if(handler != null) handler(this, EventArgs.Empty);
}
public event EventHandler DataChanged;

然后将任何代码挂接到DataChanged事件。例如:
MyClass mc = ...
mc.DataChanged += delegate {
    Console.WriteLine("new data! wow!");
};

10-06 14:16