是否可以将Custom EventArgs与SystemEvents一起使用?

时间:2016-04-09 10:40:56

标签: c# events

我的第一篇文章,如果已经回答道歉,我会道歉 - 我已经搜索过并搜索过但未找到任何关于将Custom EventArgs与现有SystemEvents一起使用的细节。

我正在尝试利用SystemEvents.PowerModeChanged类型的事件,但是想使用我自己的Custom EventArgs而不是标准的PowerModeChangedEventArgs。我的方法是创建一个名为CustomPowerModeChangedEventArgs的类,它继承自PowerModeChangedEventArgs并使用它们,但我不知道如何告诉PowerModeChangedEventHandler使用这些新的CustomEvent args。我的代码如下:

   //Define the custom args which inherit from the PowerModeChangedEventArgs
    public class CustomPowerModeChangedEventArgs : PowerModeChangedEventArgs
    {
       public string batterylevel { get; set; }
    }

   //event raising method with CustomArgs instead of the PowerModeChangedEventArgs
    protected virtual void PowerModeChanged(object source, CustomPowerModeChangedEventArgs e)
    {

    }

SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(PowerModeChanged);

问题在于PowerModeEventChangedHandler不接受带有CustomArgs的方法PowerModeChanged。如果它是一个通用的事件处理程序,我可以定义像...这样的算法

public event EventHandler<CustomPowerModeChangedEventArgs> PowerModeCHanged;

...但我无法理解如何与非通用事件处理程序实现类似。我怀疑有可能使用lambda表达式将新的自定义args发送到处理程序,但我真的不确定这一点 - 也许我需要定义一个全新的EventChangedHandler?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

不,您无法确定事件处理程序具有哪些参数。请记住,系统中已有代码调用您的事件处理程序...您希望如何构建CustomPowerModeChangedEventArgs的实例?

如果事件是使用EventHandler<T>声明的,那仍然没有帮助你 - 调用事件处理程序的代码已经被编写,并且它将传递PowerModeChangedEventArgs < em> it 构造,而不是你的类型的实例。

现在您可以使用自定义event-args声明自己的事件,然后挂钩到SystemEvents以便您举起自己的事件(使用您自己的事件的实例 - args,但你决定构造那个)当系统事件被引发时...但你不应该期望能够添加一个事件处理程序,它需要信息事件提升者(在这种情况下系统)不知道