首先在Metronome 定义 delegate TickHandler, 以及触发Tick; 在listener 中 定义需要再Metronome中调用函数 以及 关联到 Metronome.TickerHandler()
public class Metronome
{
public event TickHandler Tick;
public delegate void TickHandler(Metronome m, EventArgs e);
public void Start()
{
while (true)
{
System.Threading.Thread.Sleep(3000);
if (Tick != null)
{
// TimeOfTick TOT = new TimeOfTick();
EventArgs e = new EventArgs();
// TOT.Time = DateTime.Now;
Tick(this, e);
}
}
}
}
public class Listener
{
public void Subscribe( Metronome m)
{
//m;
m.Tick += new Metronome.TickHandler(HeardIt);
}
private void HeardIt(Metronome m, EventArgs e)
{
System.Console.WriteLine("HEARD IT AT {0}", e);
}
}
先订阅,再触发调用
class Test
{
static void Main()
{
Metronome m = new Metronome();
Listener l = new Listener();
l.Subscribe(m);
m.Start();
}
}
通常实际项目中,metronome class 定义单例。之后在class Listener 中Metronome.getinstance().Tick += new Metronome.TichkerHandler(HearIt); , 即可完成订阅。然后 在 Metronome 类中通过 自己定义的tick(this,e) 调用Listener类 中已经声明的触发函数 HeadIT
参考:
https://msdn.microsoft.com/en-us/library/ms173171.aspx