You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何准确测量两次按钮点击时间间隔,解决Stopwatch返回0的问题

问题原因

你代码的核心问题是每次触发点击事件都会重新实例化全新的Stopwatch局部对象:

  • 第一次点击时创建的Stopwatch在方法执行结束后就被回收,没有被留存
  • 第二次点击时创建的是完全独立的新Stopwatch,从实例化到调用Stop间隔不到1毫秒,自然输出全0

修复方案

把Stopwatch调整为类级别的成员变量,和你之前定义的clicked布尔值放在同一层级即可,完整代码如下:

bool clicked = true;
// 全局共用同一个Stopwatch实例
Stopwatch stopwatch = new Stopwatch();

private void button1_Click(object sender, EventArgs e)
{
    if (clicked)
    {
        // Restart方法会自动清空上次计时结果再启动,比单独Start更稳妥
        stopwatch.Restart();
        clicked = false;
    }
    else
    {
        stopwatch.Stop();
        // 直接输出毫秒数更符合你的需求,不需要默认的时分秒格式可以保留这行
        label1.Text = $"{stopwatch.Elapsed.TotalMilliseconds} ms";
        // 需要时分秒格式就替换为下面这行
        // label1.Text = stopwatch.Elapsed.ToString();
        clicked = true;
    }
}

额外优化建议

如果你还需要保留实时刷新时间的需求,可以搭配原来的Timer组件使用:Timer只负责定时读取Stopwatch.Elapsed的值更新界面,计时逻辑完全交给精度更高的Stopwatch,哪怕把Timer的Interval设为100ms也不会影响最终计时精度,示例代码如下:

private void timer1_Tick(object sender, EventArgs e)
{
    // 仅在计时状态下刷新界面
    if (!clicked)
    {
        label1.Text = $"{stopwatch.Elapsed.TotalMilliseconds:F0} ms";
    }
}

内容的提问来源于stack exchange,提问作者Evilbitmap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:24:02