2016-04-09 5 views
1

私の最初の投稿、これはすでに答えられている場合にお詫び - 私は検索し、検索したが、カスタムEventArgsを使用して既存のSystemEventsで特定の事項を発見していない。カスタムEventArgsをSystemEventsで使用することはできますか?

SystemEvents.PowerModeChangedタイプのイベントを利用しようとしていますが、標準PowerModeChangedEventArgsの代わりに私自身のカスタムEventArgsを使用したいと考えています。私のアプローチは、PowerModeChangedEventArgsを継承するCustomPowerModeChangedEventArgsというクラスを作成して代わりに使用することでしたが、PowerModeChangedEventHandlerにこれらの新しいCustomEvent引数を使用するように指示する方法はわかりません。次のように私のコードは次のとおりです。

​​

問題はPowerModeEventChangedHandlerがCustomArgsでPowerModeChanged方法を受け入れないとです。それは私が

public event EventHandler<CustomPowerModeChangedEventArgs> PowerModeCHanged; 

...のような引数を定義することができ、汎用のEventHandlerされていた...しかし、私は非汎用イベントハンドラと似て達成するための方法を測深することはできません。ラムダ式を使って新しいカスタム引数をハンドラに送ることは可能かもしれないという疑いがありますが、これについては本当にわかりません。新しいEventChangedHandlerを定義する必要がありますか?アドバイスをいただければ幸いです。

答えて

0

いいえ、イベントハンドラが持つパラメータを決めることはできません。 に行くコードが既にシステムにあることに注意してください。イベントハンドラ... CustomPowerModeChangedEventArgsのインスタンスをどのように構築すると思いますか?

イベントがEventHandler<T>を使用して宣言されていた場合、それはまだあなたを助けていないだろう - ではなく、インスタンスのコードは、イベントハンドラが既に書き込まれている呼び出し、PowerModeChangedEventArgsそのこと構造に渡すために起こっていますあなたのタイプの

は、しかし、あなたがいることを構築することを決定し、今すぐあなたのカスタムイベント引数を使用して 自身イベントを宣言することができ、その後、あなたがあなた自身のイベント引数のインスタンスで(独自のイベントを発生させるように SystemEventsにフック)システムイベントが発生したときには...しかしイベントライザー(この場合はシステム)が認識していない情報を必要とするイベントハンドラを追加することはできません。

+0

これは理にかなっています。Jon Skeetに感謝します。カスタムArgを使って何らかの種類のシステムプロパティを変更してイベントをトリガするには、新しいクラスを作成するか、あらかじめ定義されたPowerModeChangedイベントと一緒に1つのカスタムイベントを持つ2つのイベントを使用する必要がありますか? – Chi

+0

@Chi:はい - 基本的にはシステムの観点から考えてください。イベントを発生させ、独自のイベント引数を構築する方法を知っています。あなたの*コードだけがあなたの*イベント引数のインスタンスを作成します。 –

+0

Jon Skeetさん、ありがとうございました。完璧に説明されて、私は今、私はその問題についていくらか明確に感じている。あなたの知識を伝えるために時間をとっていただき、ありがとうございますstackoverflow.comの存在のための天に感謝します。 – Chi

関連する問題