将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
需要特定签名的方法(使用参数object
和EventArgs
)。 如果您想在事件注册过程中使用您的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(); }
但是你需要考虑在哪里存储你的笔记。