2013-07-24 46 views
6

我有一個WPF觸發器,檢查雙擊一些代碼:WPF MouseButtonEventArgs時間戳值是否定的?

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

這一直運作良好,直到如今。但今天,突然單擊就引發了這個動作。當我檢查代碼時,我發現時間戳值爲爲負,這導致它始終小於SystemInfo.DoubleClickTime(500是我設置的值)。

這是正常的嗎?爲什麼這個突然改變了?

回答

10

InputEventArgs.Timestamp財產的行爲就像Environment.TickCount,在這裏您可以找到以下備註:

此屬性的值是從系統定時器中產生,是 存儲爲32位有符號整數。因此,如果系統連續運行 ,則TickCount將從零遞增到Int32.MaxValue,約爲012天, 約24.9天,然後跳轉到Int32.MinValue,它是一個 負數,然後在接下來的24.9天內增加回零。

TickCount與Ticks屬性不同,它是自2000年1月1日上午12:00以來經過的間隔爲100納秒的 的數量。

使用DateTime.Now屬性獲取此計算機上的當前本地日期和 時間。當跳發生

忽略的罕見情況下(後24.9天,然後每隔49.7天)並,您可以檢查這樣的:

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

是的,謝謝。 – Gerald