19

我需要编写在 c# 中快速运行的状态机。我喜欢 Windows Workflow Foundation 库,但它太慢而且功能太多(即繁重)。我需要更快的东西,最好是使用图形实用程序来设计图表,然后吐出 c# 代码。有什么建议么?谢谢!

4

2 回答 2

21

最终,您可能希望在 .NET 4.0 中重新设计新的WF 引擎,因为它速度更快,并提供流程图活动(不完全是状态机,但适用于大多数场景)和良好的设计器 UI 体验。但由于它尚未发布,因此目前可能不是一个好的答案。

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

于 2009-10-04T20:19:57.270 回答
6

是的,微软可能在状态机 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();
    

当然,动作将存在于 IApplicationState 的特定实例中。

于 2009-10-04T20:38:15.690 回答