我有一个带有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>();
我该如何改进?
感谢。
答案 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;
}