void socket_OnSended(string SenderID, string EventMessage)
        {
            AddMsg("Me: " + txtSend.Text + " CIS:" + counterSendTimes);
            counterSendTimes++;
            txtSend.Text = "";
            txtSend.Focus();
        }        private void AddMsg(string msg)
        {
            
            if (txtMsg.InvokeRequired)
            {
                CallBackRef c = new CallBackRef(AddMsgCallBack);
                this.Invoke(c, new object[] { msg });               
            }
            else
            {
                txtMsg.Text += Environment.NewLine + msg;                
            }
            
        }        private void AddMsgCallBack(string msg)
        {
            txtMsg.Text += Environment.NewLine + msg;
        }  在上面 加红色的语句报错误 “线程间操作无效: 从不是创建控件 “txtSend”的线程访问它” 咋样,才能保证能这么操作呢?

解决方案 »

  1.   

    在程序开始写:Control.CheckForIllegalCrossThreadCalls = false;或者用invoke处理
      

  2.   

    lz是送分的吧。 txtSend.Text = "";去掉,用Console.WriteLine()代替。
      

  3.   

    设置txtSend.Text不能直接在这个线程做,发送消息的线程和控件属性的线程是分开的,不能直接改变增加一个处理方法,判断如果控件属性需要异步改变时,要启多一个线程处理
    delegate void SetTxtCallback(string txt)
    void SetTxt(string txt)
    {
        if(txtSend.InvokeRequired)
        { 
            SetTxtCallback call = new SetTxtCallback(SetTxt);
            this.Invoke(call , new object[] { txt });
        }
        else
        {
             txtSend.Text = txt;
        }
    }