从后台工作者更新名为void的组合框/列表框数据源

时间:2011-10-18 20:16:32

标签: wpf controls datasource backgroundworker

我有大约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,因为它不是委托类型..任何想法?我正在谷歌上搜索,但你的帮助对我来说会很棒!谢谢!

1 个答案:

答案 0 :(得分:0)

如果要与后台线程中的WPF控件进行交互,则必须使用其调度程序封送对UI线程的调用。所以不要直接访问控件:

var data = LoadAHugeDataset()
myControl.DataContext = data;

使用控件的Dispatcher运行代码:

var data = LoadAHugeDataset()
myControl.Dispatcher.Invoke(() => { myControl.DataContext = data; });