[英]Measuring the time between keydown and keyup events
我試圖捕獲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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.