2013-07-24 7 views
6

Ich habe einige Code für eine WPF-Trigger, der für Doppelklicks prüft:WPF MouseButtonEventArgs Timestamp Wert ist negativ?

private void HandleButtonUp(object sender, MouseButtonEventArgs mouseEventArgs) 
    { 
     if (mouseEventArgs.ChangedButton == MouseButton.Left && 
      (mouseEventArgs.Timestamp - _lastClick) < SystemInfo.DoubleClickTime) 
     { 
      this.InvokeActions(mouseEventArgs); 
      _lastClick = 0; // Require 2 clicks again 
     } 
     else 
      _lastClick = mouseEventArgs.Timestamp; 
    } 

Das gut bis jetzt gearbeitet hat. Aber heute rufen plötzlich einzelne Klicks die Aktion auf. Als ich den Code überprüft habe, habe ich festgestellt, dass der Zeitstempelwert negativ ist, was dazu führt, dass es immer weniger als die SystemInfo.DoubleClickTime ist (500 ist, was meins eingestellt ist).

Ist das normal? Warum hat sich das plötzlich geändert?

Antwort

10

Die InputEventArgs.Timestamp Eigenschaft verhält sich wie Environment.TickCount, in dem Sie folgende Hinweise finden:

Der Wert dieser Eigenschaft wird von den System-Timer abgeleitet und ist als integer 32-Bit gespeichert. Wenn das System fortlaufend ausgeführt wird, wird TickCount für ungefähr 24,9 Tage von Null bis Int32.MaxValue für ungefähr 24,9 Tage dann zu Int32.MinValue, das eine negative Zahl ist, dann während der nächsten 24.9 Tage wieder erhöhen.

TickCount unterscheidet sich von der Ticks-Eigenschaft. Dies ist die Anzahl der 100-Nanosekunden-Intervalle, die seit dem 1.1.1000, 12:00 Uhr, verstrichen sind.

Verwenden Sie die DateTime.Now-Eigenschaft, um das aktuelle lokale Datum und die Uhrzeit auf diesem Computer abzurufen.

der seltene Fall ignorieren, wenn der Sprung (nach 24,9 Tage, dann alle 49,7 Tage) auftritt, können Sie wie folgt überprüfen:

Math.Abs(mouseEventArgs.Timestamp - _lastClick) < SystemInfo.DoubleClickTime 
+0

Ja, danke. – Gerald