【发布时间】:2013-01-10 12:57:43
【问题描述】:
我们正在使用BindingSource 绑定DataGridview。所以在主线程中我们给出了这样的。
class1BindingSource = new BindingSource();
class1BindingSource.DataSource = class1List;
this.dataGridView1.DataSource = class1BindingSource;
之后,我在表单中放置了一个后台工作人员,并在按钮点击中触发。
即在按钮中单击
this.backgroundWorker1.RunWorkerAsync()
在BackgroundWorker DoWork Event 我正在尝试更新BindingSource 并尝试更新DataGridview。
所以BindingSource 重置是在另一个类的方法中完成的。
DoWork Event
Class2 cl2 = new Class2();
cl2.UpdateBindingSource(class1BindingSource);
UpdateBindingSource Method
public void UpdateBindingSource(BindingSource bs)
{
Class1 c1 = bs.Current as Class1;
for (int i = 0; i < 1000; i++)
{
lock (bs.SyncRoot)
{
c1.MyProperty1 = i;
bs.ResetItem(0);
}
}
}
现在我遇到了一个异常,例如 BindingSource 不能是它自己的数据源。不要将DataSource 和DataMember 属性设置为引用回BindingSource 的值。
如果我在我的DoWork Event 中执行此操作,那么我可以使用BeginInvoke method 重置控制线程本身中的项目。
但实际上我正在尝试模拟我们的应用场景。所以我想用这种格式解决这个问题。
谁能帮帮我。
【问题讨论】:
标签: winforms datagridview thread-safety backgroundworker bindingsource