我有大约5个空白来查询数据库,然后设置一些控件的数据源。由于在更新控件时未冻结UI,我使用的是BackGroundWorker。有没有办法可以使用相同的空格来更新控件?只是从DoWork中调用它们...(它在尝试使用DoWork调用的void更新数据源时崩溃。)
谢谢Allon。很好的回复!我需要为我的WPF编码提供更好的基础..:这就是我做的......
private void UpdateStates(Boolean UpdateLeft, Boolean UpdateRight)
{
DataSet ds = new DataSet();
States.State State = new States.State();
if (UpdateRight == true)
{
cState.Dispatcher.Invoke(() =>
{
ds = State.StatesTable();
cState.DataContext = ds.Tables[0].DefaultView;
cState.DisplayMemberPath = ds.Tables[0].Columns[1].ToString();
cState.SelectedValuePath = ds.Tables[0].Columns[0].ToString();
});
}
}
这可以吗?它告诉我它无法在system.delegate类型上转换lambda,因为它不是委托类型..任何想法?我正在谷歌上搜索,但你的帮助对我来说会很棒!谢谢!
答案 0 :(得分:0)
如果要与后台线程中的WPF控件进行交互,则必须使用其调度程序封送对UI线程的调用。所以不要直接访问控件:
var data = LoadAHugeDataset()
myControl.DataContext = data;
使用控件的Dispatcher运行代码:
var data = LoadAHugeDataset()
myControl.Dispatcher.Invoke(() => { myControl.DataContext = data; });