我在一个方法中添加了一个线程进行读取服务器信息,在另一个方法中把从服务器得到信息付给一个textbox的属性,然后再把这个textbox添加到窗体上,之后就报了这个错误:在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级
请问各位大虾们怎么解决....

解决方案 »

  1.   

    Windows是靠消息泵来运作的,一个线程中的消息泵是不能管到其他线程中的窗口(Textbox也是一个窗口)。解决方法:委托给主线程来添加控件。form1.Invoke(...);
      

  2.   


        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Thread t = new Thread(new ThreadStart(CreateUI));
                t.Start();
            }        private void CreateUI()
            {
                AddTextBox();
            }        private void AddTextBox()
            {
                if (this.InvokeRequired)
                {
                    this.Invoke(new MethodInvoker(delegate { AddTextBox(); }));
                    return;
                }
                TextBox tb = new TextBox();
                tb.Text = "test";
                this.Controls.Add(tb);
            }    }