2012-12-18 161 views
1

我有一個Timer1的窗體,它設置爲10Sec。如何捕獲等待用戶輸入的時間間隔?

有一個KeyDown事件 - 當用戶按下「Enter」時,我想在「ans」中保存10s間隔前的持續時間。

例如:如果我現在開始定時器1和3秒後,我按Enter鍵,ANS = 3,如果我沒有按任意鍵,ANS將等於10。

我有這樣的代碼:

if (e.KeyCode == Keys.Enter) 
    { 
     ResponseTimeList.Add(timer1.Interval); 
    } 

* ResponseTimeList是:

public List<double> ResponseTimeList = new List<double>(); 

我怎麼能提高呢?

謝謝。

回答

4

那麼,從一開始,Timer就不是你想要使用的。定時器類被設計爲在預定義的時間間隔內觸發事件;例如,您可以使用計時器每10秒更新一次表單上的文本框。

相反,你想要做的是使用秒錶(System.Diagnostics.Stopwatch)。打電話Stopwatch.Start(),只要你想開始計時。當用戶按下輸入時,只需調用Stopwatch.Stop(),然後獲取以秒爲單位的時間間隔。

最後,對於10秒的邏輯,你將需要使用像這樣(有條件的評價):

var timeToDisplay = Stopwatch.ElapsedMilliseconds > 10000 ? 10 : Stopwatch.ElapsedMilliseconds/1000 
+0

明白了!謝謝。 –

0

您可以使用定時器事件。

bool isPressed = false; 
Timer timer1 = new Timer() { Interval = 10000}; 

timer1.Tick += (s, e) => 
{ 
    if (!isPressed) 
     ResponseTimeList.Add(timer1.Interval); 

    isPressed = false; 
}; 

當按下鍵:

if (e.KeyCode == Keys.Enter) 
{ 
    ResponseTimeList.Add(timer1.Interval); 
    isPressed = true; 
}