如何使用c#编写状态机?

时间:2009-10-04 19:35:28

标签: c# state-machine

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

2 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:6)

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

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

  1. 创建状态界面:

    public interface IApplicationState
    {
        void ClickOnAddFindings();        
        void ClickOnViewReport();
        //And so forth
    }
    
  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());
        }
    }
    
  3. 实例化主要状态 类。

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

    _state.ClickOnAFinding();
    
  5. 当然,这些操作将存在于IApplicationState的特定实例中。