如何在等待用户输入时捕获时间间隔?

时间:2012-12-18 15:51:54

标签: c# forms time response keydown

我有一个带有Timer1的Form,它设置为10Sec。

有一个KeyDown事件 - 当用户按下“Enter”时,我想在“ans”中保存在10S间隔结束之前的持续时间。

例如:如果我现在启动timer1,并且在3Sec之后,我按Enter键,ans = 3.如果我没有按任何键,则ans将等于10.

我有这段代码:

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

* ResponseTimeList是:

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

我该如何改进?

感谢。

2 个答案:

答案 0 :(得分:4)

嗯,首先,Timer不是您想要使用的。计时器类旨在以预定义的时间间隔触发事件;例如,您可以使用计时器每10秒更新一次表单上的文本框。

相反,您要做的是使用秒表(System.Diagnostics.Stopwatch)。无论何时想要开始计时,都要调用Stopwatch.Start()。当用户按下回车键时,只需调用Stopwatch.Stop(),然后获取已经过的时间间隔(以秒为单位)。

最后,对于10秒的逻辑,您需要使用类似的东西(条件评估):

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

答案 1 :(得分:0)

您可以使用Timer的 Tick 事件。

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;
}