在多線程中對DataGridView指定 DataSource 來填充數據,更新數據的時候,會導致DataGridView出現假死,顯示錯誤或者滾動條無法顯示的問題,在保證了DataGridView的ScrollBars設置為了Both,數據量大於DataGridView顯示的的范圍,而且沒有凍結列的情況下,解決方法如下:
一是使用 Invoke 將執行數據綁定的代碼交回給主線程(因為 DataGridView 是主線程創建的);
二是在指定 DataSource 之前,將其置為 null。
private delegate void InvokeHandler();
//子線程中
this.Invoke(new InvokeHandler(delegate()
{
dataGridView1.DataSource = null;
dataGridView1.DataSource = dgv_dt;
}));
忽略子線程操作主線程創建的對象只要加一句:Control.CheckForIllegalCrossThreadCalls = false;但不可在多線程中隨便使用。
