我现在写了一个c#的winform程序,后台有一个线程在监听局域网中的信息,收到信息后要在主窗体中动态创建一个自定义组件,但是建了组件之后我点击组件进行操作就出错,因为不是主线程创建的组件,所以不能操作求大神指导C#跨线程操作 C#  线程间通信

解决方案 »

  1.   

    用Control.Invoke,把创建界面的代码用委托写好了让UI线程调用。
      

  2.   

    我这有个例子,希望对你有帮助   //首先声明一个委托
        delegate void ShowMethod(object o);
        ShowMethod s;    
        public Form1()
        {
           s=new ShowMethod(OperateCom);
            //声明新的线程并调用方法
           Thread newThread = new Thread(ThreadOperate);
           newThread.Start();
        }
        
        private void ThreadOperate()
        {
            this.Invoke(s, new object[] { "操作" });
        }     private void OperateCom(object o)
         {
             Button btn1 = new Button();
             btn1.Text = o.ToString();
             btn1.Name = "btnOperate";
             btn1.Click+=new EventHandler(btn1_Click);
             this.Controls.Add(btn1);
         }
         private void btn1_Click(object sender, EventArgs e)
         {
             MessageBox.Show("谢谢");
         }
      

  3.   

    两种方法 :
    一种是用委托,这个上面的也说了
    还有一种是在监听线程里的开头加这一句 CheckForIllegalCrossThreadCalls = false;
    这个方法不安全,不如委托,不过也可以解决问题