.NET Timer Kontrollen schneller laufen, während das Fenster minimiert wird
Frage
Es ist eigentlich ein merklicher Unterschied, dass ich gesehen habe, aber nicht erklären kann. Diese Timer haben Intervalle auf 1ms eingestellt (die niedrigste verfügbar), aber während es minimiert ist, so scheint es, schneller ticken? Könnte jemand dieses Phänomen mir das erklären? Und wenn möglich, erklären, wie man den Effekt zu reproduzieren, während das Fenster maximiert wird?
Lösung
Ist das ein Forms.Timer
?
Ich bezweifle es läuft schneller, desto wahrscheinlicher, dass der Timer Feuerungsereignis wird in einer fristgerechten Weise gehandhabt wird. Zwar gibt es minimiert wird vermutlich weniger Meldungen durch die Form Fenster des Nachrichtensystem behandelt werden, die für eine größere Zeitscheibe erklären könnte die Timer-Nachrichten zu verarbeiten. Es besteht auch die isue der minimalen Timer Auflösung.
Falls zutreffend, versuchen Sie eine der anderen Timer-Typen verwenden, wie System.Timers
Die Windows Forms Timer-Komponente ist Single-Thread, und ist auf eine Genauigkeit von 55 Millisekunden. Wenn du erfordern einen multithreaded-Timer mit eine größere Genauigkeit, verwenden Sie die Timer-Klasse im System.Timers Namespace.
Ref .
Andere Tipps
Wenn ich mich richtig erinnere, die Minimum Auflösung, die Sie von einem System.Windows.Forms.Timer
aussteigen können (was ich davon ausgehen, ist das, was Sie verwenden hier) beträgt 55 ms. Setzen auf 1 ms im Wesentlichen bedeutet, dass es tickt kontinuierlich.
Natürlich ist ein Timer nicht, dass Zecken garantiert genau das angegebene Intervall ankommen. Wenn Ihre App mit anderen Dingen beschäftigt sind (wie der Bildschirm neu gezeichnet), dann kann es noch ein paar ms dauern, oder deutlich mehr unter hohen Last. Wenn der Zeitgeber auf ein Intervall von 1 Sekunde eingestellt ist, wird man nicht wirklich dies bemerken, aber im Minimum Fenster (55 ms), Sie könnten.
Wenn die Anwendung minimiert wird, gibt es weniger andere Ereignisse, die die Timer-Ereignisse unterbrechen können, bevor sie feuern.