WPF MouseButtonEventArgs 时间戳数值为负数?

6

我有一些用于检查双击的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)。

这是正常的吗?为什么突然改变了呢?

1个回答

11

InputEventArgs.Timestamp属性的行为类似于Environment.TickCount,在该链接中可以找到以下备注:

此属性的值来自系统计时器,并存储为32位有符号整数。 因此,如果系统连续运行,则TickCount将从零增加到Int32.MaxValue,大约24.9天后,然后跳转到Int32.MinValue(负数),然后在接下来的24.9天内再次增加到零。

TickCount与Ticks属性不同,后者是自公元1年1月1日上午12:00开始已过去的100纳秒间隔数。

使用DateTime.Now属性获取此计算机上的当前本地日期和时间。

除了那些罕见的情况(发生在24.9天之后,然后每49.7天一次),您可以像这样检查:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接