2013-07-24 12 views
6

ho qualche codice per un trigger WPF che verifica la presenza di doppio clic:WPF MouseButtonEventArgs Il valore di data/ora è negativo?

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

Questo ha funzionato bene fino ad ora. Ma oggi, improvvisamente i clic singoli stanno invocando l'azione. Quando ho controllato il codice, ho trovato che il valore di timestamp è negativo, il che risulta sempre inferiore al SystemInfo.DoubleClickTime (500 è ciò che il mio è impostato su).

È normale? Perché questo è improvvisamente cambiato?

risposta

10

La proprietà InputEventArgs.Timestamp si comporta come Environment.TickCount, dove si possono trovare le seguenti osservazioni:

Il valore di questa proprietà è derivato dal timer di sistema ed è memorizzato come intero con segno a 32 bit. Di conseguenza, se il sistema esegue continuamente , TickCount passerà da zero a Int32.MaxValue per circa 24,9 giorni, quindi passa a Int32.MinValue, che è un numero negativo , quindi incrementa nuovamente a zero durante i successivi 24,9 giorni.

TickCount è diverso dalla proprietà Ticks, ovvero il numero di intervalli di 100 nanosecondi che sono trascorsi dall'1/1/0001 alle 12:00.

Utilizzare la proprietà DateTime.Now per ottenere la data locale corrente e l'ora su questo computer.

Ignorando raro caso in cui si verifica il salto (dopo 24,9 giorni, poi ogni 49,7 giorni), si può verificare in questo modo:

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

Sì, grazie. – Gerald