2009-10-04 8 views
19

私はC#で高速に動作するステートマシンを書く必要があります。 私はWindows Workflow Foundationライブラリが気に入っていますが、機能があまりにも遅く、混雑しています(重いなど)。ダイアグラムを設計するグラフィカルなユーティリティを使って、もっと速く、理想的には何かが必要です。そして、C#コードを吐き出してください。 提案がありますか? ありがとう!C#で状態マシンを書き込む方法は?

答えて

21

最終的には、はるかに高速で、フローチャートアクティビティ(ほとんどのシナリオでは機能しませんが、ほとんどのシナリオで機能します)と素敵なデザイナUI体験を提供するように、新しくデザインされたWF engine in .NET 4.0が必要です。しかし、それはまだリリースされていないので、おそらく今は良い答えではありません。代替案として

は、.NETでステートマシンのプログラムを作成するために特別にstateless、ライブラリを試みることができます。 UIを提供するようには見えませんが、他の目標を達成するのに適しています。

+0

ありがとう! – Nestor

+15

+1のステートレス。 Workflow Foundation(WF 4.0でも可)に比べると、ライブラリーはすばらしく、新鮮な空気が吹き込みます。 –

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(); 
    

、アクションがの特定のインスタンスに住んでいますIApplicationState。

+0

興味深い実装。共有してくれてありがとう。 – Nestor

関連する問題