如何在 C# 中订阅一个事件,我们可以在 C# 中为一个事件设置多个订阅者吗?
事件使类或对象能够在发生某些感兴趣的事情时通知其他类或对象。
引发事件的类称为发布者,处理事件的类称为订阅者。
在事件中
一个事件可以有多个订阅者。一个订阅者可以处理来自多个发布者的多个事件。
没有订阅者的事件永远不会被触发。
发布者确定何时引发事件;订阅者确定对事件做出的响应操作。
示例
class Program { static void Main() { var video = new MP4() { Title = "Eminem" }; var videoEncoder = new MP4EncoderNew(); var mailService = new MailService(); var messageService = new MessageService(); videoEncoder.mp4Encoded += mailService.onVideoEncoded; videoEncoder.mp4Encoded += messageService.onVideoEncoded; videoEncoder.Encode(video); Console.ReadKey(); } } public class MP4 { public string Title { get; set; } } public class MP4Args : EventArgs { public MP4 mp4 { get; set; } } public class MP4EncoderNew { public EventHandler mp4Encoded; public void Encode(MP4 video) { Console.WriteLine("Encoding MP4"); Thread.Sleep(3000); OnVideoEncoded(video); } protected void OnVideoEncoded(MP4 video) { if (mp4Encoded != null) { mp4Encoded(this, new MP4Args() { mp4 = video }); } } } //Subscriber 1 public class MailService { public void onVideoEncoded(object source, MP4Args e) { Console.WriteLine("Mail Service:,Sending an email {0}", e.mp4.Title); } } //Subscriber 2 public class MessageService { public void onVideoEncoded(object source, MP4Args e) { Console.WriteLine("Message Service:,Sending an Message {0}", e.mp4.Title); } }
输出
Encoding MP4 Mail Service:,Sending an email Eminem Message Service:,Sending an Message Eminem
广告