C# DataGridViewer 实时更新显示数据报错问题会出现红叉

图片说明
图片说明

for (i = 0; i < len - 2; i++)
{
if (recvbuf[i + 1] == 0x03 && recvbuf[i + 2] == 0x18)
{
if (data_test_crc(recvbuf, strlenlt, recvbuf) > 0)
{
DataRow dr = dt.NewRow();
dr[0] = recvbuf[i];
//dr[1] = (recvbuf[i + 3] << 8 | recvbuf[i + 4]);
dr[1] = DateTime.Now.ToString("");
dr[2] = (recvbuf[i + 13] << 8 | recvbuf[i + 14]);
dr[3] = (recvbuf[i + 15] << 8 | recvbuf[i + 16]);
dr[4] = (recvbuf[i + 17] << 8 | recvbuf[i + 18]);
dr[5] = (recvbuf[i + 11] << 8 | recvbuf[i + 12]);
dr[6] = (recvbuf[i + 9] << 8 | recvbuf[i + 10]);
dr[7] = (recvbuf[i + 3] << 8 | recvbuf[i + 4]);
dr[8] = (recvbuf[i + 17] << 8 | recvbuf[i + 18]);
dr[9] = (recvbuf[i + 11] << 8 | recvbuf[i + 12]);
dr[10] = (recvbuf[i + 19] << 8 | recvbuf[i + 20]);
dr[11] = (recvbuf[i + 23] << 8 | recvbuf[i + 24]);
dr[12] = (recvbuf[i + 23] << 8 | recvbuf[i + 24]);
dr[13] = (recvbuf[i + 25] << 8 | recvbuf[i + 26]);
lock (datatableLock)
dt.Rows.Add(dr);

                            skinDataGridView1.Invalidate();
                        }
                    }
                }
                m_bRecvStop = true;

    delegate void _DelegateDataGridView(DataGridView _DataGridView, DataTable _DataTable);//定义委托
    void _SetDelegateDataGridView(DataGridView _DataGridView, DataTable _DataTable)
    {
        if (_DataGridView.InvokeRequired)
        {
            if (_DataGridView.Columns.Count == 0)
            {
                _DataGridView.Columns.Add("IsWorking", "任务");
            }
            _DataGridView.Invoke(new _DelegateDataGridView(_SetDelegateDataGridView), new object[] { _DataGridView, _DataTable });
        }
        else
        {

            for (int _Rows1 = 0; _Rows1 < _DataTable.Rows.Count; _Rows1++)
            {
                string _IsWorking = _DataTable.Rows[_Rows1]["IsWorking"].ToString();                
                _DataGridView.Rows.Add(_IsWorking);
            }
        }
    }

skinDataGridView1.Invalidate(); //不知道你加上这句是要干什么。
修改数据源后需要重新绑定。

建议你 把代码逐行 逐块删除,然后编译。看看去掉哪几句就不报错。