C#将参数传递给事件处理程序

时间:2012-09-07 22:14:56

标签: events parameters handler

我想到了一个问题。假设我想将变量theVar传递给下面的事件处理程序声明

new EventHandler<AsyncCompletedEventArgs>(evHandler)

并在以下定义中接收:

public void evHandler(object sender, EventArgs e)
{
}

我该如何处理?

2 个答案:

答案 0 :(得分:2)

如果你是编写提升活动代码的人,霍普金森先生在他的回答中说得非常好。您需要一个带有属性的自定义EventArgs来表示您希望传递的数据。

但如果你只是在消费这个事件而不是提高它,那么你的选择就会受到限制。

由于您预计会从事件中接收AsyncCompletedEventArgs,因此您确实有一个选项:AsyncCompletedEventArgs的UserState属性。当您调用最终导致事件被触发的异步方法时,这是您可以提供的属性。它可以是您选择的任何对象。您在调用async方法时提供它,并且当方法调用完成时,事件会在事件参数属性中将其返回给您。

答案 1 :(得分:1)

定义EventArgs的后代

e.g。

public class MySpecialEventArgs :EventArgs
{
   public int theVar {get; private set;}

   public MySpecialEventArgs(int argVar)
   {
      theVar = argVar;
   }

}

然后当你举起事件时抛出上面的一个而不是EventArgs

当您添加处理程序时,e将是MySpecialEventArgs。