将参数传递给eventandler

本文关键字:eventandler 参数传递 | 更新日期: 2023-09-27 18:18:55

我有以下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 ?

将参数传递给eventandler

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

但是你需要考虑把你的笔记放在哪里