Entwickler-Ecke

WPF / Silverlight - Timer nicht akkurat genug


Testobjekt - Do 07.12.17 15:04
Titel: Timer nicht akkurat genug
Hallo Freunde!

Ich mache derzeit ein bestimmtes Programm und dafür benötige ich einen Timer beziehungsweise eine Stoppuhr die nach Zehntelsekunde(100ms) genau nach oben zählt.
Wenn ich jedoch den Timer starte und ihn mit dem Timer auf meinem Smartphone vergleiche, merke ich, dass der Timer etwas zu langsam ist und eben je länger der Timer läuft desto ungenauer wird es.

C#-Quelltext
1:
2:
3:
dt.Interval = TimeSpan.FromMilliseconds(100);
dt.Tick += dtTicker;
dt.Start();

Wie kann ich den Timer präzisieren? Find da nix zu :?:

Vielen Dank bereits im Voraus :D

PS: Wird in WPF 3.5 Framework geschrieben

Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Do 07.12.2017 um 14:17


Symbroson - Do 07.12.17 15:06

kannst du durch den Timer irgendwie die Vergangene Zeit nach dem Start oder so ermitteln? Dadurch sollte der Timer genau bleiben. Ansonsten muss es auch möglich sein die Systemzeit abzufragen.
LG


Symbroson - Do 07.12.17 15:28

Schau mal hier: https://msdn.microsoft.com/de-de/library/system.timespan(v=vs.110).aspx
Da sind alle verfügbaren Methoden von dem TimeSpan-Objekt aufgelistet. Ich vermute mal die Total* Methoden geben die vergangene Zeit seit dem Erstellen des Objektes zurück

Ansonsten gibt es noch DateTime.now: https://stackoverflow.com/questions/11929554/datetime-now-as-timespan-value
das kannst du ja mal als Alternative ausprobieren

Edit: In Delphi greife ich inzwischen auch meistens auf QueryPerformanceCounter und QueryPerformanceFrequency zurück - die sind ziemlich genau. Hab nicht dran gedacht, dasss die WinAPI in C# verfügbar sein könnte :roll:


Th69 - Do 07.12.17 15:30

Hallo,

die Timer-Komponente hat nur eine Auflösung von ca. 15ms, so daß du also bei 100ms eine gewisse Ungenauigkeit drin hast.
Bei exakter(er) Zeitmessung benötigst du einen "high resolution timer", s. z.B. High-Performance Timer in C# [https://www.codeproject.com/Articles/2635/High-Performance-Timer-in-C] oder Microsecond and Millisecond C# Timer [https://www.codeproject.com/Articles/98346/Microsecond-and-Millisecond-NET-Timer].


Delete - Do 07.12.17 18:30

- Nachträglich durch die Entwickler-Ecke gelöscht -