C#学习(二十二)——线程间操作无效: 从不是创建控件“dataGridView1”的线程访问它

//我有一个方法,从服务里取数据然后赋值给datagirdview
private void ReadDgv()
{
QM_LabBill.WebService1SoapClient aa = new QM_LabBill.WebService1SoapClient();
dataGridView1.DataSource = aa.getYGDay();
}
//然后在窗体加载的时候用线程读取数据
private void FmDgv_Load(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(ReadDgv));
thread.Start();
}
//这个时候会报错:线程间操作无效: 从不是创建控件“dataGridView1”的线程访问它。
//那么这时候需要往你的方法里用到前台控件的地方加两行如下的代码,具体为啥你们查
//一下,我查了忘了
private void ReadDgv()
{
QM_LabBill.WebService1SoapClient aa = new QM_LabBill.WebService1SoapClient();
DataTable dt=aa.getYGDay();

## 关键在这里

this.Invoke(new EventHandler(delegate
{
dataGridView1.DataSource = dt;
}));
}

关键在这里

在控件线程上执行委托

this.Invoke(new EventHandler(delegate
{
dataGridView1.DataSource = dt;
}));

你可能感兴趣的:(C#学习,多线程)