C# 事件(2)

来源:互联网 发布:国外的社交软件 编辑:程序博客网 时间:2024/06/08 13:38
下边Demo如果是在vs2012 下运行需要进入调试模式,并且用合理的速度调试一遍才能正常运行出结果。
 

namespace ConsoleApplication2{    public delegate void MessageHanlder(Connection source, MessageArrivedEventArgs e);    public class Connection    {        public event MessageHanlder MessageArried;        private Timer pollTimer;        public string name { get; set; }        public Connection()        {            pollTimer = new Timer(700);            pollTimer.Elapsed += new ElapsedEventHandler(CheckForMsg);        }        public void Connect()        {            pollTimer.Start();        }        public void DisConnect()        {            pollTimer.Stop();        }        private static Random random = new Random();        void CheckForMsg(object sources, ElapsedEventArgs e)        {            Console.WriteLine("Checking for new messages");            if ((random.Next(9) == 0) && (MessageArried != null))//使用了委托语法,但语法略有不同,其含义为“事件是否有订阅者?”如果没有订阅者,MessageArrived就是null,也就不会引发事件。            {                MessageArried(this, new MessageArrivedEventArgs("Hello Mum!"));            }        }    }    class Display    {        public void DisplayMsg(Connection source, MessageArrivedEventArgs e)        {            Console.WriteLine("message arrived from:{0}", source.name);            Console.WriteLine("message Text:{0}", e.Message);        }    }    class Program    {        static void Main(string[] args)        {            Connection conn1 = new Connection();            conn1.name = "First conneciton";            Connection conn2 = new Connection();            conn2.name = "second connection";            Display display = new Display();            conn1.MessageArried += new MessageHanlder(display.DisplayMsg);//注册事件            conn2.MessageArried += delegate(Connection source, MessageArrivedEventArgs e)//匿名方式注册事件            {                Console.WriteLine("dddddddddd message arrived from:{0}", source.name);                Console.WriteLine("dddddddddd message Text:{0}", e.Message);            };            conn2.Connect();            conn1.Connect();            Console.ReadKey();        }    }    public class MessageArrivedEventArgs : EventArgs    {        private string message;        public string Message        {            get { return message; }        }        public MessageArrivedEventArgs()        {            message = "No message sent";        }        public MessageArrivedEventArgs(string newmsge)        {            message = newmsge;        }    }}

image

 

<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击