2013-07-24 37 views
6

Tôi có một số mã cho một cò WPF để kiểm tra cho đôi lần nhấp chuột:WPF MouseButtonEventArgs Giá trị dấu thời gian là âm?

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

này đã làm việc tốt cho đến bây giờ. Nhưng hôm nay, đột nhiên nhấp chuột duy nhất đang gọi hành động. Khi tôi kiểm tra mã, tôi đã thấy rằng giá trị dấu thời gian là âm dẫn đến giá trị này luôn nhỏ hơn SystemInfo.DoubleClickTime (500 là giá trị của tôi được đặt thành).

Điều này có bình thường không? Tại sao điều này đột nhiên thay đổi?

Trả lời

10

Thuộc tính InputEventArgs.Timestamp hoạt động như Environment.TickCount, nơi bạn có thể tìm thấy những chú thích sau:

Giá trị tài sản này có nguồn gốc từ hệ thống hẹn giờ và là lưu trữ như một số nguyên ký 32-bit. Do đó, nếu hệ thống chạy liên tục , TickCount sẽ tăng từ 0 lên Int32.MaxValue cho khoảng 24,9 ngày, sau đó chuyển đến Int32.MinValue, là số âm , sau đó tăng về 0 trong 24.9 ngày tới.

TickCount khác với thuộc tính Ticks, là số lượng khoảng thời gian 100 nano giây đã trôi qua kể từ 1/1/0001, 12:00 sáng.

Sử dụng thuộc tính DateTime.Now để lấy ngày địa phương hiện tại và thời gian trên máy tính này.

Bỏ qua những trường hợp hiếm hoi khi nhảy xảy ra (sau 24,9 ngày, sau đó mỗi 49,7 ngày), bạn có thể kiểm tra như thế này:

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

Vâng, cảm ơn bạn. – Gerald

Các vấn đề liên quan