Vs2005 安全的线程调用举例

点击按钮,触发线程,在线程中调用主UI线程。    

 

   private void AddMessage(string message)

        {

            // InvokeRequired需要比较调用线程ID和创建线程ID

            // 如果它们不相同则返回true

            if (this.lbClient.InvokeRequired)

            {

                worker = new Worker(AddMessage);

                this.Invoke(worker, new object[] { message });

            }

            else

            {

                this.lbClient.Items.Add(message);

            }

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            Thread thread = new Thread(new ThreadStart(HandleMsg));

            thread.Start();

        }

 

        public void HandleMsg()

        {

            IPEndPoint localEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9060);

            ArrayList list = new ArrayList(10);

            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

 

            server.Bind(localEP);

            EndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);

 

 

            int recv;

            byte[] data;

 

            while (true)

            {

                data = new byte[1024];

                recv = 0;

                recv = server.ReceiveFrom(data, ref remoteEP);                   

               

                AddMessage("Waiting for a client");

 

                String message = Encoding.ASCII.GetString(data, 0, recv);

                switch (message)

                {

                    case "join":

                        worker.Invoke(string.Format("Received from {0}: ", remoteEP.ToString()));

                        list.Add(remoteEP);

                        break;

                    case "quit":

                        list.Remove(remoteEP);

                        break;

                    default:

                        int i = 0;

                        String Data = Encoding.ASCII.GetString(data) + remoteEP.ToString();

                        while (i < list.Count)

                        {

                            server.SendTo(Encoding.ASCII.GetBytes(remoteEP.ToString()), recv, SocketFlags.None, (EndPoint)list[i]);

                            ++i;

                        }

                        break;

                }

            }

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值