Thread thread4 = new Thread(new ThreadStart(setDatagridview44)); thread4.Start(); thread4.Join(); private void setDatagridview44() { DataTable dtAuto = new DataTable(); dtAuto.Columns.Add("MAINGUID", typeof(string)); dtAuto.Columns.Add("检查日期", typeof(string)); dtAuto.Columns.Add("姓名", typeof(string)); dtAuto.Columns.Add("年龄", typeof(string)); dtAuto.Columns.Add("单位", typeof(string)); dtAuto.Columns.Add("常用地址", typeof(string)); dtAuto.Columns.Add("身份证号", typeof(string)); dtAuto.Columns.Add("电话", typeof(string)); this.Invoke(new Action(() => { dgvCheckUpResult.DataSource = dtAuto; dgvCheckUpResult.Columns["MAINGUID"].Visible = false; })); }
时间: 2024-02-15 12:05:51 浏览: 119
在您的代码中,setDatagridview44() 方法中使用了 Invoke() 方法来更新 UI 界面的 DataGridView 控件。
在使用 Invoke() 方法时,需要注意以下几点:
1. Invoke() 方法只能在控件所在的线程上调用,否则会抛出异常。
2. 在使用 Invoke() 方法时,需要确保 UI 线程处于运行状态,否则会导致死锁。
3. 在使用 Invoke() 方法时,需要确保 UI 控件已经创建完成,否则可能会出现空引用异常。
因此,在您的代码中,可以将 setDatagridview44() 方法中的 Invoke() 方法修改为以下代码:
```
private void setDatagridview44()
{
DataTable dtAuto = new DataTable();
dtAuto.Columns.Add("MAINGUID", typeof(string));
dtAuto.Columns.Add("检查日期", typeof(string));
dtAuto.Columns.Add("姓名", typeof(string));
dtAuto.Columns.Add("年龄", typeof(string));
dtAuto.Columns.Add("单位", typeof(string));
dtAuto.Columns.Add("常用地址", typeof(string));
dtAuto.Columns.Add("身份证号", typeof(string));
dtAuto.Columns.Add("电话", typeof(string));
dgvCheckUpResult.BeginInvoke(new Action(() =>
{
dgvCheckUpResult.DataSource = dtAuto;
dgvCheckUpResult.Columns["MAINGUID"].Visible = false;
}));
}
```
在上面的代码中,我们使用了 BeginInvoke() 方法来将委托放到 UI 线程队列中等待执行,这样可以确保 UI 线程处于运行状态,并且避免了调用 Invoke() 方法时可能出现的死锁问题。
阅读全文