Передать параметр в 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));
но получаю ошибку:
"имя метода положено"
EDIT: в этом случае я просто передаю e из метода, который содержит этот фрагмент кода, как бы я передал собственный таймер EventArgs
?
2 ответа:
Timer.Elapsed
ожидает метод конкретной подписи (с аргументамиobject
иEventArgs
). Если вы хотите использоватьPlayMusicEvent
метод с дополнительным аргументом оценку во время регистрации событий, вы можете использовать лямбда-выражение в качестве адаптера:myTimer.Elapsed += new ElapsedEventHandler((sender, e) => PlayMusicEvent(sender, e, musicNote));
Edit: вы также можете использовать сокращенный вариант:
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(); }
но вам нужно подумать о том, где хранить вашу записку.