簡體   English   中英

測量按鍵事件和按鍵事件之間的時間

[英]Measuring the time between keydown and keyup events

我試圖捕獲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);
    }
}

非常感謝您的幫助。

更好的方法是使用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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM