Ger*_*ald 6 c# wpf triggers mouseevent
我有一些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;
}
Run Code Online (Sandbox Code Playgroud)
这一直运作良好.但是今天,突然单击即可调用该操作.当我检查代码时,我发现时间戳值为负,这导致它总是小于SystemInfo.DoubleClickTime(500是我的设置).
这是正常的吗?为什么突然改变了?
Cle*_*ens 10
该InputEventArgs.Timestamp属性的行为类似于Environment.TickCount,您可以在其中找到以下备注:
此属性的值派生自系统计时器,并存储为32位有符号整数.因此,如果系统连续运行,计时单位计数将从零递增到Int32.MaxValue约24.9天,然后跳转到Int32.MinValue,这是一个负数,那么在接下来的24.9天递增回零.
TickCount与Ticks属性不同,Ticks属性是自1/1/0001,12:00 am以来经过的100纳秒间隔的数量.
使用DateTime.Now属性获取此计算机上的当前本地日期和时间.
忽略跳转发生时的罕见情况(24.9天后,然后每49.7天),您可以这样检查:
Math.Abs(mouseEventArgs.Timestamp - _lastClick) < SystemInfo.DoubleClickTime
Run Code Online (Sandbox Code Playgroud)