2016-04-09 41 views
1

我的第一篇文章,道歉,如果這已被回答 - 我已經搜索和搜索,但沒有發現任何具體使用Custom EventArgs與現有SystemEvents。是否可以使用SystemEvents自定義EventArgs?

我想利用SystemEvents.PowerModeChanged類型的事件,但想用我自己的自定義EventArgs而不是標準的PowerModeChangedEventArgs。我的方法是創建一個名爲CustomPowerModeChangedEventArgs的類,該類繼承自PowerModeChangedEventArgs並使用它們,但我不知道如何告訴PowerModeChangedEventHandler使用這些新的CustomEvent參數。我的代碼如下:

​​

的問題是與PowerModeEventChangedHandler不接受該方法與CustomArgs PowerModeChanged。如果這是一個普通的事件處理程序,我可以這樣定義的ARGS ...

public event EventHandler<CustomPowerModeChangedEventArgs> PowerModeCHanged; 

...但我無法捉摸如何實現用非一般的事件處理程序相似。我懷疑可能使用lambda表達式將新的自定義參數發送給處理程序,但我確實不確定 - 也許我需要定義一個全新的EventChangedHandler?任何建議將不勝感激。

回答

0

不,你不能決定事件處理程序有什麼參數。請記住,系統中已有代碼,其中請致電您的事件處理程序...您如何期望它構建您的CustomPowerModeChangedEventArgs的實例?

如果事件一直使用EventHandler<T>宣佈,仍然不會幫你 - 代碼調用事件處理程序已被寫入,並且它會在一個PowerModeChangedEventArgs結構來傳遞,而不是一個實例你的類型。

現在你可以使用自定義事件ARGS聲明你自己事件,然後勾入SystemEvents讓你提高自己的事件(用自己的事件ARGS的實例,但你決定構建)當系統事件引發時...但你不應該期望能夠添加一個事件處理程序,該事件處理程序需要事件提升程序(在這種情況下系統)不知道的信息。

+0

這很有道理,謝謝Jon Skeet。這是否意味着爲了讓某些系統屬性的自定義參數更改觸發事件,我需要編寫一個新類,或者將兩個事件與一個自定義事件結合使用以預定義PowerModeChanged事件? – Chi

+0

@Chi:是的 - 基本上從系統的角度考慮它。它知道如何引發事件並構建自己的事件參數。只有*你的*代碼將創建* your *事件參數的實例。 –

+0

謝謝Jon Skeet,非常感謝。完美地解釋,我現在覺得我對這個問題有一些清晰。感謝您花時間傳授您的知識,並感謝天堂的stackoverflow.com的存在。 – Chi

相關問題