利用UDP协议写的接收用户即时通信程序,在接收到其他用户发送来的信息时如何实现新建一个窗口并将其信息放在新建窗口里?最好给个例子!
新手不会跨线程创建一个新窗口!哪位高人最好能给个例子!

解决方案 »

  1.   

    接收UDP 通过线程更新listview :lvMessage
    创建窗口原理一样delegate void AddList(string s);
     void Recevice()
            {
                string hostname = System.Net.Dns.GetHostName();
                System.Net.IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(hostname);
                string ip = ipEntry.AddressList[0].ToString();            IPEndPoint localEP = new IPEndPoint(IPAddress.Parse(ip), 9060);
                ArrayList list = new ArrayList(10);
                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);                String message = Encoding.Default.GetString(data, 0, recv);
                    String Data = Encoding.Default.GetString(data);                ChangeUI(Data);
                }
            }
            void ChangeUI(string s)
            {
               if (lvMessage.InvokeRequired)
                {
                    Invoke(new AddList(ChangeUI), s);
                }
                else
                {
                    ListViewItem lvi = new ListViewItem();
                    lvi.ImageIndex = 1;
                    lvi.Tag = mi.MnID + mi.Time;
                    lvi.SubItems.Clear();
                    lvi.SubItems[0].Text = s;
                    lvMessage.Items.Insert(0, lvi);
                }
            }
      

  2.   

    udp经常会丢失数据,不太稳定啊。
      

  3.   

    能给出一段代码实现以下功能的同样有分:
    双击下拉列表的代码如下:
     public void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
       ……
    }
    某个类中的代码:
     myForm.listBox1.MouseDoubleClick+=new MouseEventHandler(myForm.listBox1_MouseDoubleClick);
    myForm.listBox1已经绑定双击事件,我想在这个类中通过委托手动调用listBox1_MouseDoubleClick方法。