WPF MouseButtonEventArgs时间戳值为负数
本文关键字:MouseButtonEventArgs 时间戳 WPF | 更新日期: 2023-09-27 18:24:36
我有一些用于检查双击的WPF触发器的代码:
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是我的设置值)。
这正常吗?为什么情况突然发生了变化?
InputEventArgs.Timestamp
属性的行为与Environment.TickCount
类似,您可以在其中找到以下备注:
此属性的值源自系统计时器,为存储为32位带符号整数。因此,如果系统运行TickCount将连续从零递增到Int32.MaxValue大约24.9天,然后跳到Int32.MinValue,这是一个负数,然后在接下来的24.9中递增回零天。
TickCount与Ticks属性不同,后者是自0001年1月1日凌晨12点起经过的100纳秒间隔。
使用DateTime.Now属性获取当前本地日期和时间。
忽略跳跃发生时的罕见情况(24.9天后,然后每49.7天),您可以这样检查:
Math.Abs(mouseEventArgs.Timestamp - _lastClick) < SystemInfo.DoubleClickTime