如何在 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
廣告