事件传递参数
本文关键字:参数 事件 | 更新日期: 2023-09-27 18:22:28
我对事件有问题。例如,let i have eventpublic event EventHandler<AxisChangedEventArgs> AxisChanged
它在Axis平移或缩放或其他情况下激发。当它开火时,我正在制作Console.WriteLine("Working");
。我如何将CFDBOX
参数传递到SomeWork
匿名方法中没有帮助,因为它不可能取消订阅。而且我不能覆盖AxisChanged
事件。
public void AddEvents(CFDBOX CFDBOX) {
CFDBOX.PlotModel.Axes[0].AxisChanged += SomeWork;
}
public void RemoveEvents(CFDBOX CFDBOX) {
CFDBOX.PlotModel.Axes[0].AxisChanged -= SomeWork;
}
public EventHandler<AxisChangedEventArgs> SomeWork =
delegate(object o, AxisChangedEventArgs args) {
Console.WriteLine("Working");
}
;
利用闭包lambda表达式:
private EventHandler<AxisChangedEventArgs> axisChangedEventHandler;
public void AddEvent(CFDBOX CFDBOX) {
// keep a reference of the event handler to remove it later
axisChangedEventHandler = (o, args) => {
// parameter CFDBOX bound to the event handler
Console.WriteLine("Working " + CFDBOX);
};
// register event handler
CFDBOX.PlotModel.Axes[0].AxisChanged += axisChangedEventHandler;
}
public void RemoveEvent() {
// unregister event handler
CFDBOX.PlotModel.Axes[0].AxisChanged -= axisChangedEventHandler;
}
任何必须与event
一起传递的参数都应该是EventArgs
实现的成员。在您的场景中:AxisChangedEventArgs
。希望我能回答你的问题。
事件的发送方(在您的案例中为o
)应该始终是调用该事件的实例。因此,如果您的事件get是从不同的类(而不是实例!)激发的,则必须检查o
的类型。