如何编写触发器?

jp2*_*ode 1 c# events multithreading

每当为我的对象赋值时,我希望我的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();
  }

}
Run Code Online (Sandbox Code Playgroud)

代表似乎不是我需要的.也许是一个事件?如果是这样,我将如何撰写此类活动?

MyClass mc;

void processA() {
  mc = new MyClass();
  mc.Data = GetDataFromLongProcess();
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

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;
Run Code Online (Sandbox Code Playgroud)

然后将任何代码挂钩到DataChanged事件.例如:

MyClass mc = ...
mc.DataChanged += delegate {
    Console.WriteLine("new data! wow!");
};
Run Code Online (Sandbox Code Playgroud)