我的第一篇文章,如果已经回答道歉,我会道歉 - 我已经搜索过并搜索过但未找到任何关于将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?任何建议将不胜感激。
答案 0 :(得分:0)
不,您无法确定事件处理程序具有哪些参数。请记住,系统中已有代码调用您的事件处理程序...您希望如何构建CustomPowerModeChangedEventArgs
的实例?
如果事件是使用EventHandler<T>
声明的,那仍然没有帮助你 - 调用事件处理程序的代码已经被编写,并且它将传递PowerModeChangedEventArgs
< em> it 构造,而不是你的类型的实例。
现在您可以使用自定义event-args声明自己的事件,然后挂钩到SystemEvents
以便您举起自己的事件(使用您自己的事件的实例 - args,但你决定构造那个)当系统事件被引发时...但你不应该期望能够添加一个事件处理程序,它需要信息事件提升者(在这种情况下系统)不知道