请问,为什么这样编写的委托会出现“从不是创建控件“textBox1”的线程访问它。”

请教,为什么这样编写的委托会出现“从不是创建控件“textBox1”的线程访问它。”
从一个窗体到另外一个窗体的委托没有问题。

然后从一个非窗体类 到 窗体 的委托时,出现错误。信息如下:
引用
线程间操作无效: 从不是创建控件“textBox1”的线程访问它。


编写的程序代码如下

namespace thread_product_consume2
{
    public delegate void UpdataTextBox(string str);

    public class Sushi
    {
        public UpdataTextBox updata_TXT;
       ..............
    }

    class CellConsum  { .....}

    class CellProd{.....}

  }



   public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.textBox1.Text = null;
            Add_Text("ABC1");

            int result = 0;

            Sushi FoodSushi = new Sushi();
            FoodSushi.updata_TXT = new UpdataTextBox( Add_Text);

            //用单元初始化二个实例
            CellProd prod = new CellProd(FoodSushi, 20);
            CellConsum consum = new CellConsum(FoodSushi, 20);
        }

        //在文本框输出文字
        public void Add_Text(string str)
        {
            this.textBox1.Text +=str;
        }
  }

------解决思路----------------------
引用:
我还是没有办法解开它。
现在是在委托响应函数中的一条语句出问题。


        //在文本框输出文字
        public void Add_Text(string str3)
        {
            this.textBox1.Text += "str3";     <-----就是在这条语句上说“从不是创建控件“textBox1”的线程访问它。”
        }

委托绑定的方法使用Invoke或者BeginInvoke调用
public void Add_Text(string str)
         {
             this.textBox1.BeginInvoke((Action)delegate{
                 this.textBox1.Text +=str;
             });
         }

------解决思路----------------------
用了异步就要用异步的方法
------解决思路----------------------
简单点说就是你的程序里面创建那个控件线程是A,但是你现在调用这个控件的线程是B。
------解决思路----------------------
搜一搜:委托操作UI,一大把代码可以抄
先看看人家完整的讲解和例子,然后copy
不要从只言片语里修修改改
------解决思路----------------------
多线程操作UI元素啊,要使用委托的。