Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查布尔值之间的时间差_C#_Stopwatch - Fatal编程技术网

C# 检查布尔值之间的时间差

C# 检查布尔值之间的时间差,c#,stopwatch,C#,Stopwatch,我有一个布尔值,名为isPressed,当所有键盘和鼠标按钮都处于活动状态时,它处于活动状态。我想要实现的是,当isPressed布尔值为true时启动计时器(最好使用Stopwatch类)。当isPressed为真时,保持计时器运行,一旦isPressed为false时,停止计时器并获取差值。在它停止并且再次为真,然后再次停止之后,将差异添加到上一个计时器 我试图使用此代码,但无法使其正常工作。我试过这样做: Stopwatch stopWatch = new Stopwatch(); Tim

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

我试图使用此代码,但无法使其正常工作。我试过这样做:

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时间设置为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;
            }
        }
    }

多亏了@Andrey Nasonov,我实际上成功地让它工作了,我所要做的就是设置
Stopwatch Stopwatch=new Stopwatch()全局。

具体来说,显示isPressed的分配位置。这就是你想要启动/停止计时器的地方。也许你应该将秒表设置为全局,并且只构建一次(当
显示为真时)。@EricJ。isPressed在KeyDown和MouseDown事件中分配。然后,您应该在这里启动/停止计时器。@RobCroll提出的解决方案似乎是合理的。注意:从您的按键和鼠标向下事件处理程序中调用
Pressed=true
Pressed=false