C# 事件处理,如何链接事件

C# 事件处理,如何链接事件,c#,events,event-handling,C#,Events,Event Handling,我有下面的代码,Metronome类以3秒的滴答声创建事件,Listener类在每次接收到事件时都会听到Metronome滴答声并将“Ticked”打印到控制台。我还想做的是链接进一步的事件,这意味着在“勾选”之前或之后我应该能够处理其他事件,我在控制台窗口上看到的输出是这样的: “已处理的初始事件” “勾选” “已处理最终事件” 这可能吗 namespace Events { using System; class Program { static v

我有下面的代码,Metronome类以3秒的滴答声创建事件,Listener类在每次接收到事件时都会听到Metronome滴答声并将“Ticked”打印到控制台。我还想做的是链接进一步的事件,这意味着在“勾选”之前或之后我应该能够处理其他事件,我在控制台窗口上看到的输出是这样的:

“已处理的初始事件” “勾选” “已处理最终事件”

这可能吗

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");
        }
    }
}

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

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

令人困惑的标题,您只有一个事件。我目前只有一个事件,我的问题是如何更改它,以便可以处理多个事件。