如何用c#编写状态机?

Nes*_*tor 19 c# state-machine

我需要编写在c#中运行速度快的状态机.我喜欢Windows Workflow Foundation库,但它太慢而且过于拥挤(特别重).我需要更快的东西,理想情况下使用图形工具来设计图表,然后吐出c#代码.有什么建议?谢谢!

bob*_*mcr 21

最终,您可能需要.NET 4.0中新重新设计的WF引擎,因为它更快,并提供流程图活动(不是一个状态机,但适用于大多数情况)和良好的设计器UI体验.但由于它还没有发布,现在可能不是一个好的答案.

作为替代方案,您可以尝试无状态,一个专门用于在.NET中创建状态机程序的库.它似乎没有提供UI,但看起来非常适合实现您的其他目标.

  • 无国籍的+1.与Workflow Foundation(甚至是WF 4.0)相比,这是一个很棒的小图书馆和新鲜空气. (15认同)

Rap*_*Rap 6

是的,微软可能已经超越了他们使用State Machine WF的时间.顺序工作流程的收益要好得多.

当我们决定使用状态机时,我们推出了自己的状态机.因为我们找不到一个可接受的UI框架.这是我们的步骤.希望他们能帮到你.

  1. 创建您的状态界面:

    public interface IApplicationState
    {
        void ClickOnAddFindings();        
        void ClickOnViewReport();
        //And so forth
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建状态并让它们实现接口:

    public class AddFindingsState : IApplicationState
    {
        frmMain _mForm;
    
        public AddFindingsState(frmMain mForm)
        {
            this._mForm = mForm;
        }
    
        public void ClickOnAddFindings()
        {            
        }
    
        public void ClickOnViewReport()
        {
            // Set the State
            _mForm.SetState(_mForm.GetViewTheReportState());
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 实例化主类中的状态.

    IApplicationState _addFindingsState;
    IApplicationState _viewTheReportState;
    _addFindingsState = new AddFindingsState(this);
    _viewTheReportState = new ViewTheReportState(this);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 当用户执行需要更改状态的操作时,请调用方法来设置状态:

    _state.ClickOnAFinding();
    
    Run Code Online (Sandbox Code Playgroud)

当然,这些操作将存在于IApplicationState的特定实例中.