如何测量点击之间的时间?

How do I measure time between clicks?

我一直在为自己制作一个小项目,试图测量两次点击之间的时间。稍后我会将其更改为按键,但我可以自己完成。我需要以毫秒为单位测量时间,我知道的唯一方法是使用计时器...

    bool clicked = true;
    int time = 0;

    private void button1_Click(object sender, EventArgs e)
    {
        if (clicked)
        {
            timer1.Start();
            clicked = false;
        }
        else
        {
            timer1.Stop();
            clicked = true;
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        time += 10;
        label1.Text = Convert.ToString(time);
    }

定时器设置为 10 个刻度的间隔,只是为了直观地看到我还让定时器显示时间。但是当我测试它时,我添加了另一个间隔为 1000 刻度的计时器,由此我看到了不同之处。后来我意识到计时器不准确。我开始挖掘,唯一被推荐​​的是秒表,我尝试了这个...

    private void button1_Click(object sender, EventArgs e)
    {
        var timer = new Stopwatch();

        if (clicked)
        {
            timer.Start();
            clicked = false;
        }
        else
        {
            timer.Stop();
            TimeSpan timeTaken = timer.Elapsed;
            label1.Text = timeTaken.ToString();
            clicked = true;
        }
    }

但是那个returns每次都是“00:00:00”的结果。我该怎么办?

我认为您不需要计时器,您只需计算第一次点击(将点击发生的日期和时间存储在 dtPreviousClick 变量中)与第二次点击之间经过的时间。 2 个 DateTime 对象之间的区别是一个 Timespan 个对象,它有一个名为 TotalMilliseconds 的 属性,这是您要查找的值。

参考:https://docs.microsoft.com/en-us/dotnet/api/system.timespan.totalmilliseconds

bool clicked = false;
DateTime dtPreviousClick;

private void button1_Click(object sender, EventArgs e)
{
  if (!clicked)
  {
    dtPreviousClick = DateTime.UtcNow;
    clicked = true;
    label1.Text = "awaiting another click....";
    
  }
  else
  {
    label1.Text = (DateTime.UtcNow - dtPreviousClick).TotalMilliseconds.ToString();
    clicked = false;
  }
}