2013-07-24 23 views
6

Mam kod wyzwalacza WPF, który sprawdza podwójnych kliknięć:Wartość znacznika czasu WPF MouseButtonEventArgs jest ujemna?

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; 
    } 

To działa dobrze aż do teraz. Ale dziś nagle jedno kliknięcie wywołuje akcję. Kiedy sprawdziłem kod, stwierdziłem, że wartość znacznika czasowego to ujemna, co powoduje, że zawsze jest mniejsza niż SystemInfo.DoubleClickTime (500 jest tym, dla którego ustawiono moje).

Czy to normalne? Dlaczego to się nagle zmieniło?

Odpowiedz

10

Obiekt InputEventArgs.Timestamp zachowuje się jak Environment.TickCount, gdzie można znaleźć następujące uwagi:

Wartość tej właściwości jest pochodzący z zegarem systemowym i jest przechowywana jako 32-bitowej liczby całkowitej. W związku z tym, jeśli system będzie stale działał , TickCount będzie zwiększał od zera do Int32.MaxValue o około 24,9 dni, a następnie przeskoczy do wartości Int32.MinValue, która jest liczbą ujemną o , a następnie zwiększy do zera w ciągu następnych 24,9 dni.

TickCount różni się od właściwości Ticks, która jest liczbą przedziałów 100-nanosekundowych wynoszących od 1 do 1/100, od godziny 01:00 do 00:00.

Użyj właściwości DateTime.Now, aby uzyskać bieżącą datę lokalną i godzinę na tym komputerze.

Ignorując rzadki przypadek, gdy wystąpi skok (po 24,9 dniach, następnie co 49,7 dni), można sprawdzić w ten sposób:

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

Tak, dziękuję. – Gerald

Powiązane problemy