【问题标题】:Checking the time difference between boolean values检查布尔值之间的时间差
【发布时间】:2015-09-29 23:50:14
【问题描述】:

我有一个名为isPressed 的布尔值,它在所有键盘和鼠标按钮都处于活动状态时处于活动状态。我想要实现的是当isPressed 布尔值为true 时启动计时器(最好使用秒表类)。虽然isPressed 为真,但请保持计时器继续运行,一旦isPressedfalse,则停止计时器并获得差异。在它停止并再次为真然后再次停止后,将差异添加到上一个计时器。

我尝试使用post 中的代码,但无法正常工作。我尝试做类似的事情:

Stopwatch stopWatch = new Stopwatch();
TimeSpan ts = stopWatch.Elapsed;
if (isPressed)
{
    stopWatch.Start();
}
else
{
    stopWatch.Stop();
    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
    lblTime.Text = string.Format("{0}", elapsedTime);
}

lblTime 标签始终为 0。

【问题讨论】:

  • 具体来说,显示分配 isPressed 的位置。这就是您要启动/停止计时器的地方。
  • 也许您应该将stopWatch 设为全局并只构造一次(当isPressed 为真时)。
  • @EricJ。 isPressed 在 KeyDown 和 MouseDown 事件中分配。
  • 那是你应该开始/停止你的计时器的地方。 @RobCroll 提出的解决方案似乎是合理的。

标签: c# stopwatch


【解决方案1】:

我认为秒表可能是不必要的开销。您可以标记时间 isPressed 设置为 true,时间 isPressed 设置为 false,然后进行计算。

    private long _pressedTicks;
    private long _durationTicks;

    private bool _pressed;

    public bool Pressed
    {
        get { return _pressed; }
        set
        {
            if (value == _pressed)
            {
                //Do nothing;
            }
            else if (value == false)
            {
                _durationTicks = DateTime.Now.Ticks - _pressedTicks;
                _pressed = value;
            }
            else
            {
                _pressed = value;
                _pressedTicks = DateTime.Now.Ticks;
            }
        }
    }

【讨论】:

  • 注意:从您的 KeyDown 和 MouseDown 事件处理程序中酌情调用 Pressed = truePressed = false
【解决方案2】:

感谢@Andrey Nasonov,我实际上设法让它工作,我所要做的只是设置Stopwatch stopWatch = new Stopwatch(); global。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2012-02-15
    • 2021-03-15
    • 1970-01-01
    相关资源
    最近更新 更多