事件传递参数

本文关键字:参数 事件 | 更新日期: 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的类型。