1

我有带 Timer1 的表格,它设置为 10 秒。

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

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

我有这个代码:

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

*响应时间列表是:

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

我该如何改进它?

谢谢。

4

2 回答 2

4

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

相反,您希望使用秒表 (System.Diagnostics.Stopwatch)。每当您想开始计时时,请调用 Stopwatch.Start()。当用户按下回车键时,只需调用 Stopwatch.Stop() 然后获取以秒为单位的时间间隔。

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

var timeToDisplay = Stopwatch.ElapsedMilliseconds > 10000 ? 10 : Stopwatch.ElapsedMilliseconds/1000
于 2012-12-18T15:59:46.807 回答
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;
}
于 2012-12-18T16:12:24.500 回答