将附加参数传递给事件处理程序



我有一个接受以下事件签名的事件处理程序(它来自第三方库,因此我无法更改事件处理程序(:

Task handleEvent(SomeEventArgs args)

我这样注册我的处理程序:

eventProcessor.ProcessEventsAsync += handleEvent;

并实现这样的方法:

private async Task handleEvent(SomeEventArgs args)
{
if (args.Data.Test == parameterValue) {}
}

问题是,我想找到一种方法将parameterValue传递到处理程序中。我意识到我可以通过将它存储为类上的字段或属性来实现这一点,但我想知道是否有直接传递它的方法。

如果订阅时有可用的参数,则可以使用lambda函数:

...
{
eventProcessor.ProcessEventsAsync += (arg) => handleEvent(arg, parameterValue);
}
private async Task handleEvent(SomeEventArgs args, object parameter)
{
if (args.Data.Test == parameter) {}
}

只需将object更改为您的类型即可。

它是引发事件的库,并将参数传递给处理程序。如果该库不支持它(例如,通过给你一些对象属性,你可以在它上设置,然后当它引发事件时会返回给你(,那么你必须按照你提出的方式进行;处理类保留知识,并在事件引发时使用它

您可以更改方法的签名,并定义一个作为此方法委托的字段:

private Func<SomeEventArgs,string,Task> handleEventDelegate = handleEvent;
private async Task handleEvent(SomeEventArgs args, string parameterValue)
{
if (args.Data.Test == parameterValue) {}
}

您可以订阅和订阅您的活动:

eventProcessor.ProcessEventsAsync += handleEventDelegate;
eventProcessor.ProcessEventsAsync -= handleEventDelegate;

最新更新