2013-07-24 2 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 для примерно 24,9 дня, затем перейти к Int32.MinValue, который является отрицательным числом , а затем увеличивать его до нуля в течение следующих 24.9 дней.

TickCount отличается от свойства Ticks, который представляет собой число 100-наносекундных интервалов, прошедших с 01.01.10001 года, 12:00.

Используйте свойство DateTime.Now для получения текущей локальной даты и времени на этом компьютере.

Игнорирование редкий случай, когда происходит переход (через 24,9 дней, затем каждые 49,7 дней), вы можете проверить, как это:

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

Да, спасибо. – Gerald

Смежные вопросы