J'ai le suivant EventHandler
auquel j'ai ajouté un paramètre MusicNote
music:
public void PlayMusicEvent(object sender, EventArgs e,MusicNote music)
{
music.player.Stop();
System.Timers.Timer myTimer = (System.Timers.Timer)sender;
myTimer.Stop();
}
J'ai besoin d'ajouter le gestionnaire à un Timer
comme ceci:
myTimer.Elapsed += new ElapsedEventHandler(PlayMusicEvent(this, e, musicNote));
mais obtenez l'erreur:
"Nom de la méthode attendu"
EDIT: Dans ce cas, je passe simplement de la méthode qui contient cet extrait de code, comment pourrais-je transmettre le propre EventArgs
de la minuterie?
Timer.Elapsed
attend une méthode de signature spécifique (avec les arguments object
et EventArgs
). Si vous souhaitez utiliser votre méthode PlayMusicEvent
avec un argument supplémentaire évalué lors de l'enregistrement de l'événement, vous pouvez utiliser l'expression lambda comme adaptateur:
myTimer.Elapsed += new ElapsedEventHandler((sender, e) => PlayMusicEvent(sender, e, musicNote));
Edit: vous pouvez aussi utiliser une version plus courte:
myTimer.Elapsed += (sender, e) => PlayMusicEvent(sender, e, musicNote);
Si je comprends bien votre problème, vous appelez une méthode au lieu de la transmettre en tant que paramètre. Essayez ce qui suit:
myTimer.Elapsed += PlayMusicEvent;
où
public void PlayMusicEvent(object sender, ElapsedEventArgs e)
{
music.player.Stop();
System.Timers.Timer myTimer = (System.Timers.Timer)sender;
myTimer.Stop();
}
Mais vous devez penser à l'endroit où stocker votre note.