Bonjour à tous,
Je souhaite utiliser un timer dont le déclenchement d'un callback soit asservi sur la période que je renseigne, quelque soit le temps passé par dans le callback déclenché.
J'ai essayé avec System.Threading.Timer et System.Timers.Timer. Mais apparemment dans les deux cas, la période que je donne correspond au temps entre la fin de l'ancien callback et le début du nouveau. Cela finit par dériver, par ex pour une période de 100ms :
au lieu de quelque chose du genre1.734
1.843
1.953
2.062
2.171
2.281
2.390
2.500
2.609
J'accepte qu'il y ait une imprécision de qq dizaines de ms, mais pas qu'on diverge de la période que je donne.1.734
1.843
1.923
2.032
2.141
2.221
2.330
2.440
2.329
Est-ce que le comportement que je constate avec System.Timers.Timer est celui attendu ?
Est-ce qu'il y a un moyen de paramétrer une classe existante pour qu'elle fasse ce que je veux ?
Est-ce que je dois me refaire une nouvelle classe ?
Avec System.Timers.Timer, j'ai fait comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TimerTester { class Program { static void Main(string[] args) { System.Timers.Timer TestSystemTimersTimer = new System.Timers.Timer(); TestSystemTimersTimer.AutoReset = true; TestSystemTimersTimer.Interval = 100; TestSystemTimersTimer.Elapsed += new System.Timers.ElapsedEventHandler(TestTimer_Elapsed); TestSystemTimersTimer.Start(); System.Console.ReadLine(); } static void TestTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { System.Timers.Timer TestTimer = sender as System.Timers.Timer; System.Console.WriteLine("{0}.{1}", e.SignalTime.Second, e.SignalTime.Millisecond); } } }
Partager