多线程绑定DataGridView的问题
单击Button5绑定DataGridView,代码如下: 
 delegate   void   MyDeletegate(); 
 string   connString   =    "server=.;uid=sa;pwd=speed;database=Northwind ";   
 private   void   button5_Click(object   sender,   EventArgs   e) 
 { 
             Thread   t   =   new   Thread(new   ThreadStart(ThreadBind)); 
             t.Name   =    "NewThread "; 
             t.Start();                                     
 }   
 private   void   ThreadBind() 
 { 
                this.BeginInvoke(new   MyDeletegate(BindGrid));                                     
 }   
 private   void   BindGrid() 
 { 
                SqlConnection   sqlconn   =   new   SqlConnection(connString); 
                sqlconn.Open();   
                   SqlDataAdapter   adp   =   new   SqlDataAdapter( "SELECT   *   FROM   Products ",   sqlconn); 
                   SqlCommandBuilder   sqlcomm   =   new   SqlCommandBuilder(adp);   
                   DataSet   ds   =   new   DataSet(); 
                   adp.Fill(ds); 
                   this.dataGridView1.DataSource   =   ds.Tables[0]; 
                   sqlconn.Close(); 
 }     
 现在的问题是绑定DataGridView的时候界面还是处于假死状态,应该怎么样做才能保证界面不是假死呢?
------解决方案--------------------up
------解决方案--------------------我觉得你可以使用BackgroundWorker后台线程来做,异步调用数据。 
 待RunWorkerCompleted再给控件加载数据。 
 你直接用线程访问控件这种方法是不安去的。这个msdn文档里面有做说明。 
 所以微软搞了个BackgroundWorker,我觉得这个可以。 
 你试试看。 
------解决方案--------------------      public partial class frmUserManger :  BaseForm 
     { 
         public frmUserManger() 
         { 
             InitializeComponent(); 
         } 
         Tb_Employee ltb = null;   
         private BackgroundWorker bg = new BackgroundWorker();   
         DataTable dtcbo ;           
         private void frmUserManger_Load(object sender, EventArgs e) 
         { 
             ltb = new Tb_Employee(); 
             BindGridView();              
             bg.DoWork += new DoWorkEventHandler(bg_DoWork); 
             bg.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bg_RunWorkerCompleted); 
             bg.RunWorkerAsync(); 
         }   
         void bg_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
         { 
             cboType.DataSource = dtcbo; 
             cboType.DisplayMember =  "Value "; 
             cboType.ValueMember =  "UID "; 
         }   
         void bg_DoWork(object sender, DoWorkEventArgs e) 
         { 
             DataTable dt = new clsStandardCode().GetStandardCodeList( "subkind "); 
             DataTable dt2 = new clsStandardCode().GetStandardCodeList( "department ");   
             DataTable dttemp = dt.Copy(); 
             dttemp.Merge(dt2, true); 
             dtcbo = dttemp; 
         }   
         private void BindGridView()