然後再把抓到的值塞到同一個DataTable中
最後再把DataTable的東西即時show到DataGridView上

目前的做法是把DataTable加到DataGridView.DataSource中
再透過多執行緒更新各自對應欄位儲存格的值
來達到畫面即時更新的效果

但目前測試下來畫面不是很卡就是容易整個卡死
因此想問問各位大大
如果在需要即時更新DataGridView畫面的前提下
有什麼更好的做法嗎?

下面是執行緒裡面唯一有更新DataTable的地方

private void SetStatus()
        if (Form1.form1.InvokeRequired)
            Form1.form1.Invoke(new Action(SetStatus), new object[] { });
            if (bool_AutoRun)
                // -------------------------------
                // 這邊跟DataTable無關就先刪掉了
                // -------------------------------
                MPU.dt_MainTable.Rows[int_ThreadNum + index]["Static"] = str_Data[index];
                Application.DoEvents();
    catch (Exception ex)
        throw ex;
                        
                        
                        
                            japhenchen 大大你好,我是用微軟的SQL Server,但我這邊都還沒有連到資料庫,只是單純讀取本機txt設備清單,並在抓值後更新DataTable和更新DataGridView,是最後處理完SQL語法才會由主執行緒去回寫資料庫
canrong 大大也就是說我設備數據更新後先把值用變數存起來,再由form的timer把值接回來去做畫面更新對嗎?

可以使用 Control.Invoke 方法來在執行緒中即時更新 DataTable,如果您希望在 DataTable 更新時立即刷新 DataGridView 畫面,您可以在更新完 DataTable 後使用 DataGridView.Refresh 方法來立即刷新畫面。

private void SetStatus()
        if (Form1.form1.InvokeRequired)
            Form1.form1.Invoke(new Action(SetStatus), new object[] { });
            if (bool_AutoRun)
                // 更新 DataTable
                MPU.dt_MainTable.Rows[int_ThreadNum + index]["Static"] = str_Data[index];
                // 刷新 DataGridView 畫面
                dataGridView1.Refresh();
    catch (Exception ex)
        throw ex;

你也可以使用 Control.BeginInvoke 方法:

private void SetStatus()
        if (Form1.form1.InvokeRequired)
            IAsyncResult result = Form1.form1.BeginInvoke(new Action(SetStatus), new object[] { });
            Form1.form1.EndInvoke(result);
            if (bool_AutoRun)
                // 更新 DataTable
                MPU.dt_MainTable.Rows[int_ThreadNum + index]["Static"] = str_Data[index];
                // 刷新 DataGridView 畫面
                dataGridView1.Refresh();
    catch (Exception ex)
        throw ex;

參考看看囉~