Mat*_*att 94 c# parameter-passing event-handling
我有以下内容EventHandler
,我添加了一个参数MusicNote
音乐:
public void PlayMusicEvent(object sender, EventArgs e,MusicNote music)
{
music.player.Stop();
System.Timers.Timer myTimer = (System.Timers.Timer)sender;
myTimer.Stop();
}
Run Code Online (Sandbox Code Playgroud)
我需要将处理程序添加到Timer
类似的内容中:
myTimer.Elapsed += new ElapsedEventHandler(PlayMusicEvent(this, e, musicNote));
Run Code Online (Sandbox Code Playgroud)
但得到错误:
"方法名称预期"
编辑:在这种情况下,我只是从包含此代码片段的方法传递e,我将如何传递计时器自己的EventArgs
?
Mag*_*tLU 242
Timer.Elapsed
期望特定签名的方法(带参数object
和EventArgs
).如果要在事件注册期间使用您的PlayMusicEvent
方法和其他参数进行评估,可以使用lambda表达式作为适配器:
myTimer.Elapsed += new ElapsedEventHandler((sender, e) => PlayMusicEvent(sender, e, musicNote));
Run Code Online (Sandbox Code Playgroud)
编辑:您也可以使用更短的版本:
myTimer.Elapsed += (sender, e) => PlayMusicEvent(sender, e, musicNote);
Run Code Online (Sandbox Code Playgroud)
如果我正确理解您的问题,您正在调用方法而不是将其作为参数传递.请尝试以下方法:
myTimer.Elapsed += PlayMusicEvent;
Run Code Online (Sandbox Code Playgroud)
哪里
public void PlayMusicEvent(object sender, ElapsedEventArgs e)
{
music.player.Stop();
System.Timers.Timer myTimer = (System.Timers.Timer)sender;
myTimer.Stop();
}
Run Code Online (Sandbox Code Playgroud)
但是你需要考虑在哪里存储你的笔记.