- public class Publish
- {
- public delegate void PublishEventHandler(object sender,PublishEventArgs e);
- private event PublishEventHandler publish;
- private Delegate[] del;
- public class PublishEventArgs :EventArgs
- {
- public string BookName { get; private set; }
- public PublishEventArgs(string bookName)
- {
- this.BookName = bookName;
- }
- }
- public void RegisterPublish(PublishEventHandler publish)
- {
- this.publish += publish;
- }
- public void UnRegisterPublish(PublishEventHandler publish)
- {
- this.publish -= publish;
- }
- public void OnPublish(PublishEventArgs e)
- {
- Console.WriteLine("OnDoPublish");
- if(publish != null)
- publish(this,e);
- }
- public void OnPublishAsyn(PublishEventArgs e)
- {
- Console.WriteLine("OnDoPublish");
- if(publish != null) {
- del = publish.GetInvocationList();
- foreach(Delegate item in del) {
- PublishEventHandler Method = (PublishEventHandler)item;
- Method.BeginInvoke(null,e,null,null);
- }
- }
- }
- }
- View Code
- public class SubScriber
- {
- private string OrderName;
- public SubScriber(string orderName)
- {
- this.OrderName = orderName;
- }
- public void publish(object sender,Test.Program.Publish.PublishEventArgs e)
- {
- Console.WriteLine(OrderName + "Buy" + e.BookName
- + " " + Thread.CurrentThread.ManagedThreadId);
- Thread.Sleep(2000);
- }
- }
- View Code
- static void Main(string[] args)
- {
- Publish pub = new Publish();
- SubScriber sub1 = new SubScriber("xiao zeng");
- SubScriber sub2 = new SubScriber("xiao Li");
- SubScriber sub3 = new SubScriber("xiao Wang");
- SubScriber sub4 = new SubScriber("xiao zhao");
- pub.RegisterPublish(sub1.publish);
- pub.RegisterPublish(sub2.publish);
- pub.RegisterPublish(sub3.publish);
- pub.RegisterPublish(sub4.publish);
- pub.OnPublish(new Publish.PublishEventArgs("Tom And Jerry"));
- pub.OnPublishAsyn(new Publish.PublishEventArgs("Tom And Jerry"));
- Console.ReadLine();
- }
- View Code
- C# 委托事件的异步调用
来源: http://www.bubuko.com/infodetail-2613822.html