【问题标题】:How to measure time between clicks in C#?如何在 C# 中测量点击之间的时间?
【发布时间】:2016-09-21 06:11:13
【问题描述】:

您好,所以我想编写一个代码来执行此操作。我一直点击,如果点击之间的时间 >= 2000 毫秒,那么在标签中写一些东西,否则继续点击。

Stopwatch sw = new Stopwatch();
    double tt = 2000;
    double duration = sw.ElapsedMilliseconds;

    private void button1_Click(object sender, EventArgs e)
    {

        sw.Start();
        if (duration >= tt)
        {
            label1.Text = "Speed reached!";
        }
        else
        {
            sw.Stop();
            duration = 0;
        }
    }

【问题讨论】:

  • 请说明您的问题 - 目前尚不清楚您需要什么帮助。
  • @JBRWilkinson 如何测量点击之间的时间,然后当时间大于或等于 2000 毫秒时发生了什么事情

标签: c# forms button stopwatch


【解决方案1】:

修改你的代码如下:

    private void button1_Click(object sender, EventArgs e)
    {
        sw.Stop();

        if (sw.Elapsed.Milliseconds >= tt)
        {
            label1.Text = "Speed reached!";
        }
        else
        {
            sw.Reset();
            sw.Start();
        }
    }

【讨论】:

    【解决方案2】:

    如果我正确理解你的问题,你想要这样的东西:

    Stopwatch sw = new Stopwatch();
    double tt = 2000;
    
    private void button1_Click(object sender, EventArgs e)
    {
        sw.Stop();
        if (sw.ElapsedMilliseconds >= tt)
        {
            label1.Text = "Speed reached!";
        }
        sw.Reset();
        sw.Start();
    }
    

    这将在第一次点击时启动秒表,然后在每次点击时测量两次点击之间的时间。

    【讨论】:

      【解决方案3】:
      private void button1_Click(object sender, EventArgs e)
      {
          Session["PrevClickTime"] = Session["PrevClickTime"] ?? DateTime.Now.AddDays(-1);
          if (((DateTime)Session["PrevClickTime"]).Subtract(DateTime.Now).Milliseconds >= 2000)
          {
              label1.Text = "Speed reached!";
          }
          else
          {
              // do y
          }
          Session["PrevClickTime"] = DateTime.Now
      }
      

      【讨论】:

        【解决方案4】:

        sw.ElapsedMilliseconds 是值类型,不是引用类型 如果将其分配给变量并且 ElapsedMilliseconds 更改 你的变量不会改变

        另外,将 start 放在代码的末尾 这应该工作

        Stopwatch sw = new Stopwatch();
            double tt = 2000;
        
            private void button1_Click(object sender, EventArgs e)
            {
                if (sw.ElapsedMilliseconds >= tt)
                {
                    label1.Text = "Speed reached!";
                }
                else
                {
                    sw.Stop();
                    sw.Reset();
                }
                sw.Start();
            }
        

        【讨论】:

          【解决方案5】:

          我会建议另一种方法,您可以在每次点击时删除点击事件处理程序启动一个 2 秒的计时器,然后在计时器的滴答声中,再次附加点击事件处理程序。 下面是示例代码:

          System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer() { Interval = 2000  }; // here time in milliseconds
          private void button1_Click(object sender, EventArgs e)  // event handler of your button
          {
              button1.Click -= button1_Click; // remove the event handler for now
          
              label1.Text = "Speed reached!";
          
              // remove already attached tick handler if any, otherwise the handler would be called multiple times
              timer.Tick -= timer_Tick;
              timer.Tick += timer_Tick;
              timer.Start();
          }
          
          void timer_Tick(object sender, System.EventArgs e)
          {
              button1.Click += button1_Click; // attach the event handler again
              timer.Stop();
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-12
            • 1970-01-01
            • 2011-07-09
            • 1970-01-01
            • 2017-05-19
            • 2011-04-03
            • 2023-03-27
            • 1970-01-01
            相关资源
            最近更新 更多