我在做一个聊天系统 多线程中接收数据时 让tabpage2的richtextbox控件显示聊天内容,我是这样写的
richtextbox2.text="聊天内容";
tabControl1.SelectedTab = tabPage2;但是当接收到数据后 tabpage2只是获得了焦点 但控件内容全部显示不出来,这到底是怎么回事啊?

解决方案 »

  1.   

    richtextbox2.text="聊天内容";
    tabControl1.SelectedTab = tabPage2;换下位置试试
    很奇快怪的问题哈
      

  2.   

    不能换位置了 tabPage1 接受别的内容呢!
      

  3.   

    线程里一般这样赋值,会报错,在线程里是不能对控件进行赋值的,不安全机制,除非加上CheckForIllegalCrossThreadCalls = false;这句话
      

  4.   

    还有多线程会出现并发性,建议Lock下吧
      

  5.   

    我在load里已经加上CheckForIllegalCrossThreadCalls = false这句了!
      

  6.   

    public Main()
            {
                InitializeComponent();
                StartCSocket();
            }
    private void Main_Load(object sender, EventArgs e)
            {
                System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
            }public void StartCSocket()
            {            myListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            IPAddress[] addrIP = Dns.GetHostAddresses("127.0.0.1");
                localAddress = addrIP[0];
                myListener.Bind(new IPEndPoint(localAddress, port));
                myListener.Listen(0);
                //Console.WriteLine("开始监听{0}:{1}", localAddress.ToString(), port.ToString());
                ThreadStart ts = new ThreadStart(ListenClientConnect);
                Thread myThread = new Thread(ts);
                myThread.Start();
            }private void ListenClientConnect()
            {
                while (true)
                {
                    Socket newClient;
                    try
                    {
                        newClient = myListener.Accept();
                    }
                    catch
                    {
                        break;
                    }
                    ParameterizedThreadStart pts = new ParameterizedThreadStart(ReceiveData);
                    Thread threadReceive = new Thread(pts);
                    User user = new User(newClient);
                    threadReceive.Start(user);
                }
            }private void ReceiveData(object obj)
            {
                Socket client = user.client;
                bool normalExit = false;
                bool exitWhile = true;
                while (exitWhile == true)
                {
                    string receiveString = null;
                    try
                    {
                        receiveString = user.sr.ReadLine();
                    }
                    catch
                    {
                        Console.WriteLine("接收数据失败");
                    }
                    if (receiveString == null)
                    {
                        if (normalExit == false)
                        {
                            if (client.Connected == true)
                            {
                                //Console.WriteLine(string.Format("与{0}失去联系,", client.RemoteEndPoint));
                                //richTextBox2.AppendText(string.Format("与{0}失去联系,", client.RemoteEndPoint));
                            }
                        }
                        break;
                    }
                    string[] splitString = receiveString.Split(',');
                    
                    richTextBox2.Text = string.Format("{0} {1} 对 您说:{2}", splitString[2].ToString(), splitString[3], splitString[4])+"\r"+richTextBox2.Text;
                     tabControl1.SelectedTab = tabPage2;//
                    }
                    client.Close();        }