2009-08-22 6 views
3

、イベントはparticluarために解雇されていますC#-Pipelineスタイルイベントモデル

簡潔負荷のために=>検証=>ポストバック=>

をレンダリング私が開発したいとしますこのようなパイプライン-styledイベント

例:

イベント1 [ "Audiance集まっている" みんな、{事象2およびイベント3 I信号までお待ちください}]

イベント1の後

は、それが集まっ

イベント2 [{イベント2、イベント3」Audianceをタスク終了しました!私のタスクがイベント3「にログインしているAudiance」イベント2イベント2 [そのタスクを実行するためにコントロールの上に

を取っている}]オーバー

であるI信号までお待ちください]

後イベント2は、それが

をタスク.....

イベント3 [ "ジョンのスキートの発表が終わった:)"]終了

非常に基本的な例で誰も説明することができます、どのように私はこれを設計することができますか?

答えて

0

非常に簡単な解決策は、それはまた、実際にASP.NETで何が起こるかに近い:

class EventChain 
{  
    public event EventHandler Phase1Completed; 
    public event EventHandler Phase2Completed; 
    public event EventHandler Phase3Completed; 

    protected void OnPhase1Complete() 
    { 
     if (Phase1Completed != null) 
     { 
      Phase1Completed(this, EventArgs.Empty); 
     } 
    } 

    public void Process() 
    { 
     // Do Phase 1 
     ... 
     OnPhase1Complete(); 

     // Do Phase 2 
     ... 
     OnPhase2Complete();  
    } 
} 
0

この例では、単純な抽象クラスと単純な拡張メソッドをハンドラのリストで使用し、話しているパイプラインモデルを実装する方法を示します。これはもちろん、イベントデータとして文字列を渡すだけの簡単な例です。あなたの状況に合わせてカスタマイズすることも可能です。

拡張メソッドRaiseEventは、ハンドラのリストを列挙し、ハンドラ上でHandleメソッドを呼び出して、イベントを通知します。

public abstract class Handler 
{ 
    public abstract void Handle(string event); 
} 

public static class HandlerExtensions 
{ 
    public static void RaiseEvent(this IEnumerable<Handler> handlers, string event) 
    { 
    foreach(var handler in handlers) { handler.Handle(event); }  
    } 
} 

... 

List<Handler> handlers = new List<Handler>(); 
handlers.Add(new Handler1()); 
handlers.Add(new Handler2()); 

handlers.RaiseEvent("event 1"); 
handlers.RaiseEvent("event 2"); 
handlers.RaiseEvent("event 3");