Pase el parámetro a EventHandler

Tengo el siguiente EventHandler al que agregué un parámetro MusicNote music:

 public void PlayMusicEvent(object sender, EventArgs e,MusicNote music) { music.player.Stop(); System.Timers.Timer myTimer = (System.Timers.Timer)sender; myTimer.Stop(); } 

Necesito agregar el controlador a un Timer como ese:

 myTimer.Elapsed += new ElapsedEventHandler(PlayMusicEvent(this, e, musicNote)); 

pero consigue el error:

“Nombre del método esperado”

EDITAR: En este caso, simplemente paso e del método que contiene este fragmento de código, ¿cómo pasaría los propios EventArgs del temporizador?

Timer.Elapsed espera un método de firma específico (con argumentos object y EventArgs ). Si desea utilizar su método PlayMusicEvent con un argumento adicional evaluado durante el registro de eventos , puede usar la expresión lambda como un adaptador:

 myTimer.Elapsed += new ElapsedEventHandler((sender, e) => PlayMusicEvent(sender, e, musicNote)); 

Editar: también puedes usar una versión más corta:

 myTimer.Elapsed += (sender, e) => PlayMusicEvent(sender, e, musicNote); 

Si entiendo su problema correctamente, está llamando a un método en lugar de pasarlo como parámetro. Pruebe lo siguiente:

 myTimer.Elapsed += PlayMusicEvent; 

dónde

 public void PlayMusicEvent(object sender, ElapsedEventArgs e) { music.player.Stop(); System.Timers.Timer myTimer = (System.Timers.Timer)sender; myTimer.Stop(); } 

Pero debes pensar dónde guardar tu nota.