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
。