我无法用自己的话解释这一点,所以情况如下:
myBindingSource.Add(new myElement());
SetDataSource(myBindingSource);
myBindingSource.Add(new myElement());
我总是在Add的第二次调用中捕获异常(跨线程异常)。这是SetDataSource void:
delegate void SetDataSourceCallback(BindingSource db);
private void SetDataSource(BindingSource db)
{
if (myDataGridView.InvokeRequired)
{
SetDataSourceCallback d = new SetDataSourceCallback(SetDataSource);
myDataGridView.Invoke(d, new object[] { db });
}
else
{
myDataGridView.DataSource = db;
}
}
我无法理解为什么会这种情况继续发生!
答案 0 :(得分:1)
使用主UI线程的调度程序安全地调用来自任何其他线程的任何UI代码。
WPF不允许您从" main"以外的其他线程更改任何UI状态。 UI线程。所以一般来说,如果你有任何改变UI的状态,你应该用Dispatcher.Invoke代码包装它。
Application.Current.Dispatcher.Invoke(new Action(() => {
myBindingSource.Add(new myElement());
SetDataSource(myBindingSource);
myBindingSource.Add(new myElement());
}));