将参数传递给 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

191039 次浏览

Timer.Elapsed需要特定签名的方法(带参数 objectEventArgs)。如果希望使用 PlayMusicEvent方法,并附加计算 在活动登记期间的参数,可以使用 lambda 表达式作为适配器:

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();
}

但是你需要考虑把你的纸条放在哪里。