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