BackgroundWorker и CollectionViewSource - PullRequest
1 голос
/ 25 января 2012

Как я могу загрузить свои данные в backgroundworker при использовании CollectionViewSource? он выдает ошибку, потому что мой CollectionViewSource находится в потоке пользовательского интерфейса.

Это весь мой код (Мой рабочий фон установлен в Xaml):

public partial class DepartmentsLookup : Window
{
    private BackgroundWorker backgroundWorker;
    private ObservableCollection<Department> AllDepartmentsData;
    private ListCollectionView AllDepartmentsView;

    private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        IEnumerable<Department> data = null;
        using (ArchiveEntities db = new ArchiveEntities())
        {
            data = db.Departments;
            this.AllDepartmentsData = new ObservableCollection<Department>(data);
        }
        CollectionViewSource departmentsSource = (CollectionViewSource)this.FindResource("AllDepartmentsDataSource");
        departmentsSource.Source = this.AllDepartmentsData;
        this.AllDepartmentsView = (ListCollectionView)departmentsSource.View;
    }

    public DepartmentsLookup()
    {
        InitializeComponent();
        backgroundWorker = ((BackgroundWorker)this.FindResource("backgroundWorker"));
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        backgroundWorker.RunWorkerAsync();
    }
}

спасибо.

1 Ответ

2 голосов
/ 25 января 2012

Вы должны работать с объектом Dispatcher WPF (Dispatcher.Invoke) для выполнения кода на элементах пользовательского интерфейса (когда это делается с помощью BackgroundWorker). Возможно эта статья может дать вам больше информации.

или работа с диспетчером WPF .

...