委托、事件小例

来源:互联网 发布:sql日期转换为时间戳 编辑:程序博客网 时间:2024/05/01 02:15

朋友在写socket的程序,希望将业务逻辑和界面分离。

写了个运用事件、委托的小demo,不当之处还望多多指点。

 

业务逻辑代码:

 

    class KeyEventArgs : EventArgs    {        private string _msg;        public KeyEventArgs(string msg)            : base()        {            this._msg = msg;        }        public string Msg        {            get            {                return _msg;            }        }    }    class Server    {         public delegate void AfterReceived( object sender, KeyEventArgs e );         public event AfterReceived ReceiveEvent;         public void Run()         {             while (true)             {                 var random = new Random();                 random.Next(1000);                 KeyEventArgs keyEventArgs = new KeyEventArgs("接收到报文:" +random.Next(1000).ToString());                 ReceiveEvent(this, keyEventArgs);                 Thread.Sleep(2000);             }         }    }

 


UI部分代码

 public partial class Main : Form    {        private Thread backGroundThread;        private Server server = new Server();        public Main()        {            InitializeComponent();            backGroundThread = new Thread(new ThreadStart(server.Run));            backGroundThread.IsBackground = true;            //注册事件处理程序            server.ReceiveEvent += AfterReceived;        }        private void btnBegin_Click(object sender, EventArgs e)        {            backGroundThread.Start();        }        /// <summary>        /// 事件处理        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void AfterReceived(object sender, KeyEventArgs e)        {            listBoxResult.Items.Add(e.Msg);        }     }


 

 

原创粉丝点击