C#中,在線程中為什么不能設定DataGrid的DataSource啊?
我想先顯示窗體,然后在線程中填數據,再綁定DataGrid,但是總提示不能更改其它線程的控件,我根本沒有操作什么啊!
(如何解決數據首次加載很慢得問題啊?(數據量不大). 就算不能提速,先讓窗體可以正常顯示也好啊!)

解决方案 »

  1.   

    this.dataGrid1.Invoke(new EventHandler(Bound));//使用这个语句回到UI线程private void Bound(object sender, System.EventArgs e)
    {
    this.dataGrid1.DataSource = ds.Tables[0].DefaultView;
    }
      

  2.   

    主要代碼如下,哪位兄弟幫忙看看:
    private void FillGrid(object sender,System.EventArgs e)
    {
    Grid.DataSource=tblMain;
    }private void fillData()
    {
    Grid.DataSource =null;
    System.Data.SqlClient.SqlConnection cn=new     System.Data.SqlClient.SqlConnection(cnStr);
             System.Data.SqlClient.SqlDataAdapter adpt=new System.Data.SqlClient.SqlDataAdapter("SELECT Old_Item_Code FROM FD_ITEM WHERE Order By Old_Item_Code",cn);
    tblMain.Rows.Clear();
    cn.Open();
    adpt.Fill(tblMain);
    cn.Close();
    Grid.Invoke(new EventHandler(FillGrid)); 
    }private void frmCMItemType_Load(object sender, System.EventArgs e)
    {
    thd=new System.Threading.Thread(new System.Threading.ThreadStart(fillData)); 
    // thd.IsBackground=true;
    thd.Start(); 
    }
      

  3.   

    解決了,把填充數據的代碼放進Invoke指定的函數中就行了.
    不過不明白為什么會這樣.
      

  4.   

    主线程之外的其他线程不能直接处理ui元素的,只能通过invoke+委托来实现