我在一个线程里面操作控键(生成Label,然后添加到Cantrols),会报异常!

解决方案 »

  1.   

    控件都是单线程,需要委托来操作.delegate void CreateLabelCall();
    void CreateLabel()
    {
       if(this.InvokeRequired)
       {
           CreateLabelCall d = new CreateLabelCall(CreateLabel);
           this.Invoke(d);
       }
       else
       {
           //create label.
           ......
       }
    }
      

  2.   

    要么通过委托,然后Invoke操作,要么就要设置ThreadIlegalCheck=false(貌似这样写)属性。
      

  3.   


    是的,看看MSDN吧,主要是检测到InvokeRequired之后,调用InvokeMethod 方法ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxmclictl/html/7fe3956f-5b8f-4f78-8aae-c9eb0b28f13a.htm
      

  4.   

    Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性。因此,如果从另一个线程调用控件的方法,那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程。该属性可用于确定是否必须调用 Invoke 方法,当不知道什么线程拥有控件时这很有用。 操作方法,看1楼的。
      

  5.   

    非UI线程不能访问UI线程创建的控件。用1楼的方法吧。