简体   繁体   English

事件传递参数

[英]Event pass parameter

I have problem with event. 我遇到了问题。 For example let i have event public event EventHandler<AxisChangedEventArgs> AxisChanged which fires when Axis pan or zoom or something else. 例如,让我有一个public event EventHandler<AxisChangedEventArgs> AxisChanged ,当Axis平移或缩放或其他操作时将触发该public event EventHandler<AxisChangedEventArgs> AxisChanged When it's firing i am making Console.WriteLine("Working"); 触发时,我正在制作Console.WriteLine("Working"); . How can i pass CFDBOX parameter into SomeWork anonymous method does not help because it will be imposible to unsubscribe from it. 我如何将CFDBOX参数传递到SomeWork匿名方法中没有帮助,因为无法取消订阅它。 And i cannot override AxisChanged event. 而且我无法覆盖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");
    }
;

Take advantage of closure lambda expressions: 利用闭包 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;
}

Any parameter which must be passed with an event should be a member of your EventArgs implementation. 必须与event一起传递的任何参数都应该是EventArgs实现的成员。 In your scenario: AxisChangedEventArgs . 在您的方案中: AxisChangedEventArgs Hope i get your question. 希望我能回答你的问题。

The sender of the event (in your case o ) should always be the instance, which calls the event. 事件的发送者(在您的情况下为o )应该始终是调用该事件的实例。 So if your event get's fired from different classes (not instances!), you will have to check for the type of o . 因此,如果从不同的类(不是实例!)触发了事件,则必须检查o的类型。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM