Salut
------
Quelqu'un peut-il me dire pourquoi si j'écris:
Alors toutes mes entrées dans TimerSweepElapsed pour mes 3 timers arrivent avec la valeur "3", soit la valeur de sortie de i de la boucle?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for (int i = 0; i < 3; i++) { myTimers[i] = new Timer(100); myTimers[i].Elapsed += delegate { TimerSweepElapsed(i); }; }
Alors que si j'écris de façon qui semble idiote ceci:
Je reçois bien une valeur comprise entre 0 et 2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for (int i = 0; i < 3; i++) { myTimers[i] = new Timer(100); var param = i; myTimers[i].Elapsed += delegate { TimerSweepElapsed(param); }; }
J'ai déjà constaté que je devais procéder comme ça, mais j'aimerais connaître la bonne raison, ou savoir s'il n'y a pas une méthode plus élégante.
Merci d'avance,
Claude
Partager