找出触发了哪个事件

3
我试图捕获触发的事件。我有两个指向同一个函数CurrentLoan_LogEntryEvent的事件。在CurrentLoan_LogEntryEvent内部,如何确定实际触发的事件:LogEntryAddedLogEntryChange
以下是我的代码示例,让我知道您对我的代码有任何问题。 CurrentLoan是一个Loan对象,它有两个事件。
public MyApplication()
{
    ThirdPartyDLL.LoanOpened += new EventHandler(CurrentLoanOpened);
}

private void CurrentLoanOpened(object sender, EventArgs e) 
{
    ThirdPartyDLL.CurrentLoan.LogEntryAdded += CurrentLoan_LogEntryEvent;
    ThirdPartyDLL.CurrentLoan.LogEntryChange += CurrentLoan_LogEntryEvent;
}

private void CurrentLoan_LogEntryEvent(object sender, LogEntryEventArgs e)
{
    // When LogEntry was Added or Changed.
    // How do I determine if LogEntryAdded or LogEntryChange was fired?
}

1
我很确定这是一个重复的问题,但我需要去找一下。最简单的选项是使用订阅一个带有lambda表达式的事件,该表达式调用通用方法并传递适当的值。不过你确定LogEntryEventArgs中没有你需要的信息吗? - Jon Skeet
2个回答

6
如果您想区分两个事件,那么将单个方法附加到多个事件上是没有意义的。请为它们分别指定不同的处理程序。
当您不关心事件来源但总是希望在处理程序中执行相同的操作时,通常会为多个事件附加单个处理程序。
如果您有一些共同的逻辑需要执行,可以在处理程序内部调用它。
private void CurrentLoanOpened(object sender, EventArgs e) 
{
    ThirdPartyDLL.CurrentLoan.LogEntryAdded += CurrentLoan_LogEntryAdded;
    ThirdPartyDLL.CurrentLoan.LogEntryChange += CurrentLoan_LogEntryChange;
}

private void CurrentLoan_LogEntryAdded(object sender, LogEntryEventArgs e)
{
    //LogEntryAdded fired
    YourOptionalCommonMethodIfAny();
}

private void CurrentLoan_LogEntryChange(object sender, LogEntryEventArgs e)
{
    //LogEntryChange fired
    YourOptionalCommonMethodIfAny();
}

5
为什么不简单地这样做:
private void CurrentLoanOpened(object sender, EventArgs e) 
{
    ThirdPartyDLL.CurrentLoan.LogEntryAdded += CurrentLoan_LogEntryAddedEvent;
    ThirdPartyDLL.CurrentLoan.LogEntryChange += CurrentLoan_LogEntryChangeEvent;
}

private void CurrentLoan_LogEntryAddedEvent(object sender, LogEntryEventArgs e)
{
    // First do what you must do specifically for added events
    CurrentLoan_LogEntry(e);
}


private void CurrentLoan_LogEntryChangeEvent(object sender, LogEntryEventArgs e)
{
    // First do what you must do specifically for changed events
    CurrentLoan_LogEntry(e);
}

将一个处理程序绑定到多个事件,然后在该处理程序内确定要执行的操作只会使事情变得过于复杂。

始终保持你的代码尽可能简单易懂、易于更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接