/// <returns>解除後の状態(ON または 無効)。</returns>
public 状態種別 ONになるまでブロックする()
{
- if( 状態種別.無効 == this.状態 )
- return 状態種別.無効; // すでに無効なら速攻で帰る。
+ if( 状態種別.無効 == this.状態 || 状態種別.ON == this.状態 )
+ return this.状態;
- this.ONイベント.WaitOne();
+ // 上の if から 下の WaitOne までの間に ON になった場合に備えて、定期的に状態をチェックする。
+ while( false == this.ONイベント.WaitOne( 100 ) )
+ {
+ if( 状態種別.ON == this.状態 )
+ break;
+ }
return this.状態;
}
/// <summary>
/// <returns>解除後の状態(OFF または 無効)。</returns>
public 状態種別 OFFになるまでブロックする()
{
- if( 状態種別.無効 == this.状態 )
- return 状態種別.無効;// すでに無効なら速攻で帰る。
+ if( 状態種別.無効 == this.状態 || 状態種別.OFF == this.状態 )
+ return this.状態;
- this.OFFイベント.WaitOne();
+ // 上の if から 下の WaitOne までの間に OFF になった場合に備えて、定期的に状態をチェックする。
+ while( false == this.OFFイベント.WaitOne( 100 ) )
+ {
+ if( 状態種別.OFF == this.状態 )
+ break;
+ }
return this.状態;
}
/// <summary>
/// </summary>
public void 無効になるまでブロックする()
{
- if( 状態種別.無効 != this.状態 )
- this.無効イベント.WaitOne();
+ if( 状態種別.無効 == this.状態 )
+ return;
+
+ // 上の if から 下の WaitOne までの間に無効になった場合に備えて、定期的に状態をチェックする。
+ while( false == this.無効イベント.WaitOne( 100 ) )
+ {
+ if( 状態種別.無効 == this.状態 )
+ break;
+ }
}
protected 状態種別 bs_状態 = 状態種別.OFF;