将parameter passing给EventHandler

我有以下EventHandler我添加了一个参数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需要特定签名的方法(使用参数objectEventArgs )。 如果您想在事件注册过程中使用您的PlayMusicEvent方法和额外的参数,可以使用lambdaexpression式作为适配器:

 myTimer.Elapsed += new ElapsedEventHandler((sender, e) => PlayMusicEvent(sender, e, musicNote)); 

编辑:你也可以使用较短的版本:

 myTimer.Elapsed += (sender, e) => PlayMusicEvent(sender, e, musicNote); 

如果我正确理解你的问题,你正在调用一个方法,而不是作为parameter passing。 尝试以下操作:

 myTimer.Elapsed += PlayMusicEvent; 

哪里

 public void PlayMusicEvent(object sender, ElapsedEventArgs e) { music.player.Stop(); System.Timers.Timer myTimer = (System.Timers.Timer)sender; myTimer.Stop(); } 

但是你需要考虑在哪里存储你的笔记。