Frage

Gibt es einen Weg, um ein delegate oder event in C # auszuführen, wenn die Sekunden, Minuten, Stunden, ... Änderung im System-Uhr, ohne einen Timer zu verwenden, das jede Millisekunde überprüft, wenn die Eigenschaft geändert hat und führt das Ereignis mit einer Verzögerung von maximal einer Millisekunde.

Ich mag also vermeiden Polling und eine Veranstaltung zu einem bestimmten Zeitpunkt ausgelöst.

War es hilfreich?

Lösung

Wenn Ihre Frage ist: "Wie führe ich einen Delegierten zu jeder vollen Sekunde / Minute / Stunde"

Für Minuten- und Stundenintervallen Sie so etwas wie in dieser Frage SO in meiner Antwort gezeigt tun können:

Dies sollte ziemlich genau sein, wird aber auf die Millisekunde nicht genau sein.

Für Sekunden-Intervalle, würde ich mit einem Timer mit einem einfachen 1-Sekunden-Intervall gehen. Aus der Sicht des Benutzers ich glaube, es ist nicht viel Unterschied, wenn die Aktion bei xx ausführt: xx: xx.000 oder bei xx: xx:. Xx.350

Andere Tipps

Sie können abonnieren Sie SystemEvents.TimeChanged . Diese wird ausgelöst, wenn der Systemtakt geändert wird.

Ich löste dies in einer Formular App durch das Intervall Einstellung (1000 - DateTime.Now.Millisecond)

        _timer1 = new System.Windows.Forms.Timer();
        _timer1.Interval = (1000 - DateTime.Now.Millisecond);
        _timer1.Enabled = true;
        _timer1.Tick += new EventHandler(updateDisplayedTime);

und im Ereignishandler zurückgesetzt das Intervall Drift zu verhindern.

        <handle event>
        _timer1.Interval = (1000 - DateTime.Now.Millisecond);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top