public Form1()
        {
            InitializeComponent();            Thread t = new Thread(new ThreadStart(RecevieMsg));//多线程
            t.Name = "Recive Name";
            t.IsBackground = true;
            t.Start();
        }
       //另一个线程
        private void RecevieMsg()
        {
          while (true)
            {
              richTextBox1.Text += "abc";//线程间操作无效
            }
        }
希望高手指点!!

解决方案 »

  1.   


            /// <summary>
            /// 定义一个委托
            /// </summary>
            private delegate void CrossThreadOperationControl();        private void RecevieMsg()
            {
                CrossThreadOperationControl CrossDelete = delegate()         
                {                          while (true)
                     {
                       richTextBox1.Text += "abc";//线程间操作无效
                     }
                 }
                richTextBox1.Invoke(CrossDelete);           
            }
      

  2.   

    最简单的方法 
    Control.CheckForIllegalCrossThreadCalls = false
      

  3.   

    这种方法比较危险一点:
    CheckForIllegalCrossThreadCalls = false;
    禁止:检查非法的跨线程调用
    这个方法最简单,如果没有多个线程同时修改的话,就可以用这个了。
    如果有多个线程修改一个控件,就不能这样了,必须做线程同步!
      

  4.   

    private delegate void MyDelelate(object sText);
    //另一个线程
    private void RecevieMsg()
    {
         while (true)
         {
              richTextBox1.Invoke(new MyDelelate(SetText), "abc");      }
    }private void SetText(object sText)
    {
        richTextBox1.Text += sText.ToString();
    }
      

  5.   

    5楼大哥说得不错...CheckForIllegalCrossThreadCalls = false ,的危险之处正在于多个线程设置同一个对象没有相应的保护
      

  6.   

    委托  public Form1()
            {
                InitializeComponent();            Thread t = new Thread(new ThreadStart(RecevieMsg));//多线程
                t.Name = "Recive Name";
                t.IsBackground = true;
                t.Start();
            }        private delegate void MyDelelate(object sText);
            private void RecevieMsg()
            {
                while (true)
                {
                    richTextBox1.Invoke(new MyDelelate(SetText), "abc");
                }
            }        private void SetText(object sText)
            {
                richTextBox1.Text += sText.ToString();
            }