Параметр Pass для EventHandler
У меня есть следующий EventHandler
, к которому я добавил параметр MusicNote
music:
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));
но получите ошибку:
"Ожидаемое имя метода"
EDIT: В этом случае я просто передаю e из метода, который содержит этот фрагмент кода, как я могу передать таймер EventArgs
?
Ответы
Ответ 1
Timer.Elapsed
ожидает метод конкретной сигнатуры (с аргументами object
и EventArgs
). Если вы хотите использовать ваш метод PlayMusicEvent
с дополнительным аргументом, оцененным во время регистрации события, вы можете использовать лямбда-выражение в качестве адаптера:
myTimer.Elapsed += new ElapsedEventHandler((sender, e) => PlayMusicEvent(sender, e, musicNote));
Изменить: вы также можете использовать более короткую версию:
myTimer.Elapsed += (sender, e) => PlayMusicEvent(sender, e, musicNote);
Ответ 2
Если я правильно понимаю вашу проблему, вы вызываете метод вместо передачи его в качестве параметра. Попробуйте следующее:
myTimer.Elapsed += PlayMusicEvent;
где
public void PlayMusicEvent(object sender, ElapsedEventArgs e)
{
music.player.Stop();
System.Timers.Timer myTimer = (System.Timers.Timer)sender;
myTimer.Stop();
}
Но вам нужно подумать о том, где хранить заметку.