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)
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)