パラメータEventHandler
musicを追加した次のMusicNote
があります。
public void PlayMusicEvent(object sender, EventArgs e,MusicNote music)
{
music.player.Stop();
System.Timers.Timer myTimer = (System.Timers.Timer)sender;
myTimer.Stop();
}
次のようにハンドラーをTimer
に追加する必要があります。
myTimer.Elapsed += new ElapsedEventHandler(PlayMusicEvent(this, e, musicNote));
しかし、エラーが発生します:
「メソッド名が必要です」
編集:この場合、このコードスニペットを含むメソッドからeを渡すだけですが、タイマー自身のEventArgs
を渡すにはどうすればよいですか?
Timer.Elapsed
は、特定の署名のメソッドを必要とします(引数object
およびEventArgs
を使用)。追加の引数を評価してPlayMusicEvent
メソッドを使用したい場合イベント登録中、ラムダ式をアダプターとして使用できます。
myTimer.Elapsed += new ElapsedEventHandler((sender, e) => PlayMusicEvent(sender, e, musicNote));
編集:より短いバージョンを使用することもできます:
myTimer.Elapsed += (sender, e) => PlayMusicEvent(sender, e, musicNote);
問題を正しく理解していれば、パラメーターとして渡すのではなくメソッドを呼び出しています。以下を試してください:
myTimer.Elapsed += PlayMusicEvent;
どこ
public void PlayMusicEvent(object sender, ElapsedEventArgs e)
{
music.player.Stop();
System.Timers.Timer myTimer = (System.Timers.Timer)sender;
myTimer.Stop();
}
ただし、メモを保存する場所について考える必要があります。