c# 测量键盘 keydown 和 keyup 之间的间隔?
c# Measuring interval between keyboard keydown and keyup?
我想测量用户按下键盘上的右箭头键并拾取它的时间(秒)。
我对此进行了研究并找到了一些网页,但没有一个好的答案。
这个时间我该如何衡量?
我的代码
我在 class 之上定义了一个列表:
List<int> date_down = new List<int>();
当用户按下右箭头键时:(在 Form_KeyDown 方法中)
if (Keyboard.IsKeyDown(Key.Right))
{
date_down.Add(DateTime.Now.Second);
}
当用户按下右箭头键并按住多次时添加到列表中
当用户拿起钥匙时(在 Form_keyUp 方法中)
if (e.Key == Key.Right)
{
var second = DateTime.Now.Second - date_down[0];
}
您可以从查找各种 class 用于在 C# 中测量时间开始,例如 this one。
您还需要一个 class 来检测按下和向上键。 Perhaps this might help.
除此之外,实现应该相当简单。按下键时启动计时器,释放键时停止计时器,并将该时间用作两个事件之间的测量值。
您的代码是一个良好的开端,但您可能需要稍微修改一下才能看到它正常工作。
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();
};
}
}
我想测量用户按下键盘上的右箭头键并拾取它的时间(秒)。
我对此进行了研究并找到了一些网页,但没有一个好的答案。
这个时间我该如何衡量?
我的代码
我在 class 之上定义了一个列表:
List<int> date_down = new List<int>();
当用户按下右箭头键时:(在 Form_KeyDown 方法中)
if (Keyboard.IsKeyDown(Key.Right))
{
date_down.Add(DateTime.Now.Second);
}
当用户按下右箭头键并按住多次时添加到列表中
当用户拿起钥匙时(在 Form_keyUp 方法中)
if (e.Key == Key.Right)
{
var second = DateTime.Now.Second - date_down[0];
}
您可以从查找各种 class 用于在 C# 中测量时间开始,例如 this one。
您还需要一个 class 来检测按下和向上键。 Perhaps this might help.
除此之外,实现应该相当简单。按下键时启动计时器,释放键时停止计时器,并将该时间用作两个事件之间的测量值。
您的代码是一个良好的开端,但您可能需要稍微修改一下才能看到它正常工作。
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();
};
}
}