2014-04-02 170 views
0

我有下面的代碼,一個節拍器類在3秒鐘的時間點創建事件,並且一個Listener類聽到節拍器滴答,並在每次接收到事件時向控制檯打印「滴答」 。我還想要做的是在「Tick」之前或之後鏈接進一步的事件,我應該能夠處理其他事件,我在控制檯窗口上看到的輸出是這樣的:事件處理,如何鏈接事件

「已處理的初始事件」 「勾選」 「已處理最終事件」

這可能嗎?

namespace Events 
{ 
    using System; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var m = new Metronome(); 
      var l = new Listener(); 
      l.Subscribe(m); 
      m.Start(); 
     } 
    } 

    public class Metronome 
    { 
     public EventArgs e = null; 
     public delegate void TickHandler(Metronome m, EventArgs e); 
     public event TickHandler Tick; 

     public void Start() 
     { 
      while (true) 
      { 
       System.Threading.Thread.Sleep(3000); 
       if (Tick != null) 
       { 
        Tick(this, e); 
       } 
      } 
     } 
    } 

    public class Listener 
    { 
     public void Subscribe(Metronome m) 
     { 
      m.Tick += new Metronome.TickHandler(HeardIt); 
     } 

     private void HeardIt(Metronome m, EventArgs e) 
     { 
      Console.WriteLine("Ticked"); 
     } 
    } 
} 
+0

混亂的標題,你只有一個單一的事件。 – Maarten

+0

我目前有一個單一的事件,我的問題是關於如何改變它,所以這可以處理多個事件。 – 03Usr

回答

1

您可以自己添加事件處理程序。

var m = new Metronome(); 
m.Tick += (s, e) => { 
    Console.WriteLine("Processed initial event"); 
}; 
var l = new Listener(); 
l.Subscribe(m); 
m.Tick += (s, e) => { 
    Console.WriteLine("Processed the final event"); 
}; 
m.Start(); 

這應該會給你想要的結果。請記住,下令在其中添加的事件是爲了使它們在執行

或者,如果你想多聽衆:

public class Listener { 
    private string _msg; 
    public Listener (string msg) { 
     _msg = msg; 
    } 

    public void Subscribe(Metronome m) { 
     m.Tick += new Metronome.TickHandler(HeardIt); 
    } 

    private void HeardIt(Metronome m, EventArgs e) { 
     Console.WriteLine(msg); 
    } 
} 

var m = new Metronome(); 
new Listener("Processed initial event").Subscribe(m); 
new Listener("Ticked").Subscribe(m); 
new Listener("Processed the final event").Subscribe(m); 
m.Start();