C#中,有什么技术可以将多线程应用在界面绘制上?
因为.net中提供的gui库不允许跨线程操作,所以当用户界面上的控件一多起来之后,gui反映速度就会急剧下降,双缓冲等一般手段完全不起作用。现在有2个问题请教各位:   
 当界面上会有很多控件时, 
 1.   如果这些控件有部分分布在可见区域之外,如何取消它们的绘制?(因为不在可见区域内,画出来也看不见)   
 2.   如果这些控件全部都处于可见状态,如何提高绘制速度?     
 另外,提供一个比较具体的例子,属于第一种情况:   
 class   复合控件   :   UserControl 
 { 
       private   System.Windows.Forms.许多控件;   
       private   void   InitializeComponent() 
       { 
             许多控件   =   new   许多控件(); 
             许多控件.许多属性   =   各自的属性设置; 
             this.Controls.Add(   各种容器   ); 
             各种容器.Controls.Add(   许多控件   ); 
       }   
       public   复合控件() 
       { 
             InitializeComponent();      //      这个过程相当耗时间 
       } 
 }      
 class   Form1   :   Form 
 { 
       private   System.Windows.Forms.Form里的许多控件;   
       private   void   InitializeComponent()      //      这个过程相当耗时间 
       { 
             Form里的许多控件   =   new   Form里的许多控件(); 
             Form里的许多控件.许多属性   =   各自的属性设置; 
             this.Controls.Add(   Form里的各种容器   ); 
             Form里的各种容器.Controls.Add(   Form里的许多控件   ); 
       }   
       public   Form1() 
       { 
             InitializeComponent();   
             this.某容器控件.SuspendLayout(); 
             for   (int   i=0;   i <某个数;   ++i) 
             { 
                   复合控件   c   =   new   复合控件(); 
                   c.Location   =   new   Point(   i   *   (   c.Width   +   3   ),   0   ); 
                   //   这里是横向排列扩展。 
                   //   根据需要也可能会是纵向排列的控件, 
                   //   但是一定都会使后面加入的控件超出可见区域, 
                   //   这时候外面的容器控件会出现滚动条。   
                   this.某容器控件.Controls.Add(   c   ); 
             } 
             this.某容器控件.ResumeLayout();   
             //   前面这个循环相当耗时,当   Form1   还没有显示出来的时候(也就是说 
             //   类似的工作是在   Form1   的构造函数或者   Load   事件中进行),可以用 
             //   Splash   之类的东西挡一挡,但是这个过程太长的话用户会产生反感。   
             //   而且,最重要的是,当主界面的   gui   上加入了这么多控件之后,程序 
             //   的   gui   重绘明显会变得很慢,即使开了双缓冲也起不到明显的效果, 
             //   甚至是完全看不出效果。但是这个过程又不能用   BackgroundWorker 
             //   之类的手段放到后台线程完成。   
             //   请问诸位高手有什么好的办法可以解决吗? 
       } 
 } 
------解决方案--------------------因为.net中提供的gui库不允许跨线程操作 
 ------------------   
 跨线程更新ui在2.0中需要用invoke方法   
 private void Form1_Load(object sender, EventArgs e) 
         {