private void AddMessage(string message)
        {
            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":
                        AddMessage(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;
                }
            }
        }

解决方案 »

  1.   

    用线程访问window窗体的Label出的错误
      

  2.   

    不是创建窗体的主线程访问窗体中的控件需要使用委托,如下:
     delegate void ListBoxAddCallback(string item);
            private void ListBoxAdd(string s)
            {
                if (this.result.InvokeRequired)
                {
                    ListBoxAddCallback d = new ListBoxAddCallback(ListBoxAdd);
                    this.Invoke(d, new object[] { s });
                }
                else
                {
                    this.lbClient.Items.Add(s);
                }
            }
      

  3.   

    直接在窗体load事件里加上下面的一句就可以了
    System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;