c#测量键盘向下键和向上键之间的间隔?

c#测量键盘向下键和向上键之间的间隔?,c#,timer,keydown,keyup,C#,Timer,Keydown,Keyup,我想测量用户按下键盘上的右箭头键并拾取时的时间(秒) 我对此进行了研究,找到了一些页面,但没有一个好的答案 这次我怎么测量 我的代码 我定义了一个顶级列表: List<int> date_down = new List<int>(); 当用户按下向右箭头键并按住时间时,添加到列表中 当用户拾取密钥时(采用表单\密钥拾取方法) 您可以从查找各种用C#测量时间的类开始,例如 您还需要一个类来检测key down和key up 除此之外,实现应该相当简单。按下按键时启动计时器

我想测量用户按下键盘上的右箭头键并拾取时的时间(秒)

我对此进行了研究,找到了一些页面,但没有一个好的答案

这次我怎么测量

我的代码

我定义了一个顶级列表:

List<int> date_down = new List<int>();
当用户按下向右箭头键并按住时间时,添加到列表中

当用户拾取密钥时(采用表单\密钥拾取方法)


您可以从查找各种用C#测量时间的类开始,例如

您还需要一个类来检测key down和key up


除此之外,实现应该相当简单。按下按键时启动计时器,松开按键时停止计时器,并将该时间用作两个事件之间的测量时间。

您的代码是一个良好的开始,尽管您可能需要对其进行一些更改以查看其工作情况

private void form1_KeyDown(object sender, System.Windows.Forms.KeyPressEventArgs e)
{        
    if (e.Key == Key.Right)
    {
        date_down = DateTime.Now;
    }
    e.Handled = true;
}

private void form1_KeyUp(object sender, System.Windows.Forms.KeyPressEventArgs e)
{ 
    if (e.Key == Key.Right)
    {
        var timeDelta = DateTime.Now - date_down;
    }
}

如果需要,您也可以从中触发计时器,而不是获取当前时间并进行计算。

这可能是另一种选择

using System.Diagnostics;
using System.Windows.Forms;

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();

        var watch = new Stopwatch();
        KeyDown += (s, e) => watch.Start();
        KeyUp += (s, e) => { 
            watch.Stop();
            var elapsed = watch.ElapsedMilliseconds;    // Duration
            watch.Reset();
        };
    }
}

您能提供代码或您迄今为止尝试过的具体示例吗?你能更具体地说明你要解决的问题吗?你想在你的应用程序中,像键盘记录器一样,在机器上测量这一点吗?这是一个游戏场景还是一个商业应用程序?在keydown上启动秒表,在keyup上结束秒表。计算差异。@NicholausLawson我写代码。我想用它来向前或向后看一部电影。谢谢,但我如何启动和停止计时器,并测量这两者之间的时间?你有任何示例代码吗?@saedbfd我看过你的编辑。请注意,List.Add方法将在列表的末尾而不是开始处追加值。因此,在您当前的实现中,无论何时提出一个键,它都会将其与您第一次按下一个键进行比较,而不是最新的。这是最好、最准确的选择!很好的答案,坦率地说,如果你想从一个具体的例子中学习的话,它比我的更有用。这个答案中的代码只会按预期工作一次。
private void form1_KeyDown(object sender, System.Windows.Forms.KeyPressEventArgs e)
{        
    if (e.Key == Key.Right)
    {
        date_down = DateTime.Now;
    }
    e.Handled = true;
}

private void form1_KeyUp(object sender, System.Windows.Forms.KeyPressEventArgs e)
{ 
    if (e.Key == Key.Right)
    {
        var timeDelta = DateTime.Now - date_down;
    }
}
using System.Diagnostics;
using System.Windows.Forms;

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();

        var watch = new Stopwatch();
        KeyDown += (s, e) => watch.Start();
        KeyUp += (s, e) => { 
            watch.Stop();
            var elapsed = watch.ElapsedMilliseconds;    // Duration
            watch.Reset();
        };
    }
}