private static int size = 1024;
        private static string clientReceiveStr = null;
        private static byte[] clientReceiveBytes = new byte[size];
        public delegate void getTXT();
      
        private void Form1_Load(object sender, EventArgs e)
        {    
               ……………………  //各种连接就不写了
               ……………………
            Thread td = new Thread(XX);     //如果不开启线程,Receive()等待接收而不执行下去,就会出现你说的窗口卡住的现象
        }
        public void XX()
        {
            try
            {
                while (true)
                {                    int n = ClientSocket.Receive(clientReceiveBytes, clientReceiveBytes.Length, 0);
                    clientReceiveStr = Encoding.UTF8.GetString(clientReceiveBytes, 0, n);
                    getTXT get = new getTXT(HH);   //要给textbox1赋值,因为在不同线程,所以要调用委托
                    
                }
            }
            catch 
            {
              
            }
        }
        public void HH()
        {
            textBox1.Text = clientReceiveStr;
        }

解决方案 »

  1.   


     public delegate void FileHandler(Zhzhu.Model.MessageInfo arg);this.BeginInvoke(new FileHandler(SaveFile), message);//显示保存文件窗体(Control.BeginInvoke())private void SaveFile(Zhzhu.Model.MessageInfo message)
            {
                FileForm file = new FileForm();
                file.Tag = message;
                file.FileSocket = client_UdpSocket;
                file.Show();
            }
      

  2.   

    哈哈,看楼上的表情很有意思。
    1.楼主在调用子窗体的时候不要再FromLode的时候做监听等操作,可以异步起新线程监听2.C#认定在线程中操作控件是不安全的行为,禁止操作的,所以要用到委托代理,网上例子很多,看看吧。