2016-08-07 13 views
0

私はカスタマイズされたTimerを書き留めており、DispatcherTimerを継承しています。 TimerSetUpというメソッドがあり、TickイベントをEventHandlerに関連付けます。C#で引数としてイベントハンドラを渡す

public class MyTimer : DispatcherTimer 
{ 
    public MyTimer(){} 
    public void TimerSetUp(EventHandler<EventArgs> _EventHandler) 
    { 
     base.Tick += _EventHandler; 
    } 
} 

私は今MyTimerを拡張するクラスの別のカップル、StopwatchTimerとCountdownTimerを、持っています。 CountdownTimerを見てみましょう。それらのいずれかが宣言されると

public class CountdownTimer : MyTimer 
{ 
    public CountdownTimer() 
    { 
     base.TimerSetUp(CountdownTimer_Tick); 
    } 

    public void CountdownTimer_Tick(object sender, EventArgs e) 
    { 
     //...do something 
    } 
} 

、コンストラクタは、基底クラスのメソッド TimerSetUp呼び出し、単にイベントハンドラを設定する必要があります。

問題はTimerSetUp関数のシグネチャで、それは私にこのエラー

Cannot implicitly convert type 'System.EventHandler<System.EventArgs>' 
to'System.EventHandler<object> 

を与え、私はそれを取り除くことができない、ということです。私はちょうどCountdownTimer内TimerSetUpを入れて、ちょうど直接イベントハンドラを割り当てた場合、この

base.Tick += CountdownTimer_Tick; 

ようにそれは動作しますが、私は実際にそれが他の方法で作業したいのですが。 だから私は

1)これは、コードの拡張性に優れたアプローチです)私はこの

2を解決することができます方法はありかどうかを知りたいのですが?

+1

のEventArgs – Steve

+0

なしのEventHandlerそれは、私はあなたのコードを使用し、ちょうどあなたがあなたを供給する場合は、 ''が必要とされる ''(標準のEventHandlerデリゲートでは必要ありません)を取り外し、 –

+0

奇妙な同じエラーを与える@Steve自身のEventArgs派生インスタンスhttps://msdn.microsoft.com/en-us/library/db0etb8x(v=vs.110).aspx – Steve

答えて

0

ネヴァーマインド、私はそれを作りました。私は、関数シグネチャにジェネリックオブジェクトをキャストし、コード内に新しいeventHandlerをラップしました。

public void TimerSetUp(EventHandler<object> _EventHandler) 
{ 
    base.Tick += new EventHandler<object>(_EventHandler); 
} 
+0

'_EventHandler'が既に' EventHandler '型である場合、なぜそれをラップする必要がありますか? – zerkms

+0

ええ、それも私の心を横切った。私はVisual Studioがこれについて少し気になると思う。 –

0

DispatchTimer.Tickは、ではなくEventHandler<EventArgs>であると思われます。とにかくベースEventArgsを使用しているので、彼らは機能的に同等です:

public void TimerSetUp(EventHandler _EventHandler) 
{ 
    base.Tick += _EventHandler; 
} 

参照:https://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer.tick(v=vs.110).aspx

+0

まだ動作しません。私が作成したこのスクリーンショットを見てください。 [link](http://prntscr.com/c2mitd) –

関連する問題