测量keydown和keyup事件之间的时间

本文关键字:之间 时间 事件 keyup keydown 测量 | 更新日期: 2023-09-27 18:20:35

我试图捕捉KeyDownKeyUp之间的时间(以毫秒为单位),即每一个键入字符的这两个事件之间的经过时间,我使用了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);
    }
}

真的很感激你的帮助。

测量keydown和keyup事件之间的时间

执行此操作的更好方法是使用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;