我为我的 c# GUI 应用程序使用状态机。有了这个,我有几个状态和一个名为 ErrorHappened 的状态。状态机可以从每个状态进入这些错误状态。但是使用这种架构,我首先知道当状态机进入 ErrorHappened 状态时发生了错误。
但是,当从一个状态 A 转换到一个状态 B 的过程中发生错误时,我该怎么办?问题是状态机从状态 A 进入状态 B 进入状态 ErrorHappened。通常,当转换到状态 B 完成时,我会执行一个操作。如果在转换过程中出现错误,我不会执行此操作。当然,我可以引入一个像 m_ErrorHappened 这样的布尔变量,但我认为我有一个状态机,所以我不会被迫使用任何状态变量。
我希望解释足够清楚以提供任何帮助。
示例代码:
StateMachine sm; // initial state is state A
void AtoB() // executed during transition from A to B
{
if(DoSomething())
{
print("Error");
// Event ErrorHappened, state machine goes into state Error
sm.GotoState(ErrorHappened);
}
}
void TransitionEnd(State NewState)
{
if(NewState==B)
{
GreenLight();
}
if(NewState==Error)
{
RedLight();
}
}
main()
{
sm.GotoState(B);
}
现在,当发生错误时,绿灯亮,然后红灯亮。因为状态机从状态 A 到状态 B 再到错误状态。有没有办法检测到错误并且只有红灯亮?