从后台线程正确更新数据绑定datagridview的方法如下:
在后台线程中,无法直接更新UI元素。因此,需要使用委托(Delegate)来更新UI元素。具体步骤如下:
a. 创建一个委托(Delegate)
public delegate void UpdateDataGridViewDelegate(DataTable dataTable);
b. 在主窗体中,创建一个方法,用于更新datagridview
public void UpdateDataGridView(DataTable dataTable)
{
if (this.dataGridView1.InvokeRequired)
{
UpdateDataGridViewDelegate updateDataGridViewDelegate = new UpdateDataGridViewDelegate(UpdateDataGridView);
this.Invoke(updateDataGridViewDelegate, dataTable);
}
else
{
this.dataGridView1.DataSource = dataTable;
}
}
c. 在后台线程中,调用主窗体中的方法,更新datagridview
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// 获取数据
DataTable dataTable = GetData();
// 更新datagridview
UpdateDataGridViewDelegate updateDataGridViewDelegate = new UpdateDataGridViewDelegate(UpdateDataGridView);
this.Invoke(updateDataGridViewDelegate, dataTable);
}
另一种方法是使用BindingSource。具体步骤如下:
a. 在主窗体中,创建一个BindingSource对象,并将其绑定到datagridview
private void Form1_Load(object sender, EventArgs e)
{
BindingSource bindingSource = new BindingSource();
bindingSource.DataSource = typeof(DataTable);
this.dataGridView1.DataSource = bindingSource;
}
b. 在后台线程中,更新BindingSource对象的DataSource属性
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// 获取数据
DataTable dataTable = GetData();
// 更新BindingSource对象的DataSource属性
this.bindingSource1.DataSource = dataTable;
}
这两种方法都可以实现从后台线程正确更新数据绑定datagridview的目的。
链上产业系列活动
小程序·云开发官方直播课(数据库方向)
云+社区技术沙龙[第9期]
Elastic Meetup Online 第一期
第四期Techo TVP开发者峰会
北极星训练营
云+社区技术沙龙[第22期]
云+社区技术沙龙[第10期]
云+社区技术沙龙[第28期]
云+社区技术沙龙[第8期]
第四期Techo TVP开发者峰会
领取专属 10元无门槛券
手把手带您无忧上云