测量keydown和keyup事件之间的时间
本文关键字:之间 时间 事件 keyup keydown 测量 | 更新日期: 2023-09-27 18:20:35
我试图捕捉KeyDown
和KeyUp
之间的时间(以毫秒为单位),即每一个键入字符的这两个事件之间的经过时间,我使用了Stopwatch.GetTimestamp()
,因为我需要获取高分辨率的时间戳,如下面的编码所示,我想知道这是否是获得时间(以微秒为单位)的正确公式:
int timeStampInMiliseconds = Convert.ToInt32(elapsedTicks * 1000000 / Stopwatch.Frequency);
,用于获取以毫秒为单位的时间。
由于计时结果没有显示出任何一致性,这两个事件之间可能长达5秒,这是不现实的!!
public partial class Form1 : Form
{
long timeStamp;
long initialTimeStamp;
public Form1()
{
InitializeComponent();
Stopwatch stopWatch = new Stopwatch();
// Uses the second Core or Processor for the Test
// Prevents "Normal" processes from interrupting Threads
// Prevents "Normal" Threads
initialize();
}
public void initialize()
{
//
}
public void textBox1_KeyDown(object sender, KeyEventArgs e)
{
initialTimeStamp = Stopwatch.GetTimestamp();
}
public void textBox1_KeyUp(object sender, KeyEventArgs e)
{
timeStamp = Stopwatch.GetTimestamp();
long elapsedTicks = timeStamp -initialTimeStamp;
int timeStampInMiliseconds = Convert.ToInt32(elapsedTicks * 1000000 / Stopwatch.Frequency);
}
}
真的很感激你的帮助。
执行此操作的更好方法是使用StopWatch.ElapsedMilliseconds
属性。
在textBox1_KeyDown
事件处理程序中,只需重新启动秒表,如下所示:
stopWatch.Restart();
在textBox1_KeyUp
事件处理程序中,读取ElapsedMilliseconds
属性,如下所示:
long timeStampInMiliseconds = stopWatch.ElapsedMilliseconds;
您还需要使stopWatch
成为这样的实例变量:
public partial class Form1 : Form
{
long timeStamp;
long initialTimeStamp;
Stopwatch stopWatch;
public Form1()
{
InitializeComponent();
stopWatch = new Stopwatch();
....
}
....
}
您不需要使用Stopwatch
。使用获取时间戳要容易得多
long t = DateTime.Now.Ticks;
试试这个:
public void textBox1_KeyDown(object sender, KeyEventArgs e)
{
initialTimeStamp = DateTime.Now.Ticks;
}
public void textBox1_KeyUp(object sender, KeyEventArgs e)
{
timeStamp = DateTime.Now.Ticks;
long elapsedTicks = timeStamp - initialTimeStamp;
long timeStampInNanoseconds = elapsedTicks * 100;
}
我用纳秒来提高精度,但如果你喜欢,你可以转换成毫秒:
long timeStampInMiliseconds = elapsedTicks / 10000;