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)。

这是正常的吗?怎么突然变了?

4

1 回答 1

11

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

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

TickCount 与 Ticks 属性不同,后者是自 0001 年 1 月 1 日凌晨 12:00 以来经过的 100 纳秒间隔数。

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

忽略跳跃发生时的罕见情况(24.9 天后,然后每 49.7 天),您可以像这样检查:

Math.Abs(mouseEventArgs.Timestamp - _lastClick) < SystemInfo.DoubleClickTime
于 2013-07-24T12:44:09.690 回答