【问题标题】:How to set StopWatch count multiple times in C#如何在 C# 中多次设置秒表计数
【发布时间】:2018-01-04 21:02:28
【问题描述】:

这是我在 C# WinForm 中单击按钮时的代码:

private void aesactive_Click(object sender, EventArgs e)
    {
        Stopwatch stopWatch = new Stopwatch();
        stopWatch.Reset();
        stopWatch.Start();
        string original = textBox4.Text;
        using (var random = new RNGCryptoServiceProvider())
        {
            string inputkey = textBox5.Text;
            byte[] key = Encoding.ASCII.GetBytes(inputkey);
            random.GetBytes(key);
            byte[] encrypted = EncryptStringToBytes_Aes(original, key);

        }
        stopWatch.Stop();
        textBox6.Text = stopWatch.ElapsedMilliseconds.ToString() + " ms ";

    }

但是当我单击该按钮两次或更多次时,结果始终为 0 毫秒。任何人都可以向我解释原因吗?非常感谢。

【问题讨论】:

  • 每次单击按钮时,代码都会创建一个新的秒表
  • 让秒表成为课堂的一部分。不是方法。
  • 您的操作可能比秒表的分辨率快

标签: c# stopwatch


【解决方案1】:

如果你想积累时间,把Stopwatch变量移到方法外,去掉对Reset()的调用:

private readonly Stopwatch stopWatch = new Stopwatch();
private void aesactive_Click(object sender, EventArgs e) {
    stopWatch.Start();
    ...
    stopWatch.Stop();
    textBox6.Text = stopWatch.ElapsedMilliseconds.ToString() + " ms ";
}

既然添加时间是一条“单行道”,请考虑添加一个按钮来重置秒表:

private void aesreset_Click(object sender, EventArgs e) {
    stopWatch.Reset();
}

注意:现代 CPU 能够每毫秒运行数百万条指令,因此可能需要您多次单击按钮才能使 textBox6 中的值远离零。

【讨论】:

  • 谢谢。我会尝试那个解决方案。昨晚,我尝试将 Stopwatch 变量移到外部,但仍将 Reset() 保留在方法中。没有改变。也许需要一个重置按钮:D
猜你喜欢
  • 2023-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多