因此,如果我有一些不断从false变为true且从true变为false的布尔值,我怎么知道它是否在选定的秒数内保持为假?并且仍然没有暂停我的代码只是为了等待它几秒钟的假...并且每次它变为真时,计时器重置
编辑: 这就是我所尝试的一切 但正如预期的那样,它会暂停一切并等待所选的秒数
static bool IsFalseFor(int MILseconds, bool Target)
{
while (Target == false)
{
for(int i = 0; i != 10; i++)
{
if(Target == true)
{
return false;
}
Thread.Sleep(MILseconds/10);
}
return true;
}
return false;
}
答案 0 :(得分:1)
我能想到的最简单的实现:
public DateTime lastSetFalse { get; private set; }
public TimeSpan lastStayedFalseFor { get; private set; }
private bool _flag;
public bool Flag
{
get
{
return _flag;
}
set
{
if (_flag && !value)
{
lastSetFalse = DateTime.Now;
}
if (!_flag && value && lastSetFalse != null)
{
lastStayedFalseFor = DateTime.Now - lastSetFalse;
//raise an event if necessary
}
_flag = value;
}
}
使用Flag
字段存储布尔值。注意lastStayedFalseFor
仅返回变量从false
更改为true
后的持续时间,或者,如果变量仍为false时需要持续时间,则添加并使用以下而不是lastStayedFalseFor:
public TimeSpan stayingOrStayedFalseFor
{ get { return _flag ? lastStayedFalseFor : DateTime.Now - lastSetFalse; } }