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 は、0001 年 1 月 1 日午前 12:00 から経過した 100 ナノ秒間隔の数である Ticks プロパティとは異なります。

DateTime.Now プロパティを使用して、このコンピューターの現在のローカル日付と時刻を取得します。

ジャンプが発生するまれなケース (24.9 日後、その後 49.7 日ごと) を無視して、次のように確認できます。

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