c#EventHandler依赖于状态转换
本文关键字:转换 状态 依赖于 c#EventHandler | 更新日期: 2023-09-27 18:20:44
我正在做一个系统,它通过池机制一直监控状态。一旦一个状态转换到另一个状态,就做一些事情来进一步处理。
我想出了一个好主意是EventHandler,它取决于状态转换。但我发现,识别国家过渡可能有很多条件。
(例如,初始->开启、开启->关闭、开启->维护、维护->开启…)
有什么好方法可以改善这个问题吗?或者有什么建议吗?谢谢
class StateMonitor
{
public delegate void Mydelegate();
public event Mydelegate SomethingHappened;
public string _state;
public StateMonitor()
{
SomethingHappened += new Mydelegate(monitor);
_state = "Initial";
}
public string state
{
get
{
return this._state;
}
set
{
string temp = value;
if (SomethingHappened != null)
{
if(this.state =="Initial" && temp =="On") //state transition
SomethingHappened();
}
}
}
public void monitor()
{
Console.WriteLine("Happened");
}
}
真正想要的是一个状态机。例如,你能从开始到结束吗?
以下是一个答案,让您开始使用状态机。
使用1个委托实现的方法的问题是,每个状态都会开始使执行工作的方法变得更大。在未来的某个时候,这种方法将无法维持,现在可以通过不同的设计来避免这种情况。
也许为States
提供enum
,并更改Delegate
的签名以处理转换,如:
class StateMonitor
{
public enum States { initial, on, off, maintaining };
public delegate void Mydelegate(States stFrom, States stTo);
public event Mydelegate SomethingHappened;
public States _state;
public StateMonitor()
{
SomethingHappened += new Mydelegate(monitor);
_state = States.initial;
}
public States state
{
get
{
return this._state;
}
set
{
if (SomethingHappened != null)
{
SomethingHappened(this._state, value);
}
_state = value;
}
}
public void monitor(States stateFrom, States stateTo)
{
if (stateFrom == States.initial && stateTo == States.on)
{
// Do something for from Intitial state to On State
}
else if (stateFrom == States.on && stateTo == States.off)
{
// Do something for from On state to Off State
}
//... the rest of the code here
}
}