1

Как я могу загрузить свои данные в backgroundworker при использовании CollectionViewSource? он выдает ошибку, потому что мой CollectionViewSource находится в потоке пользовательского интерфейса.BackgroundWorker и 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(); 
    } 
} 

Thanx.

+1

Я не вижу фонового работника. но тем не менее вы должны использовать диспетчера, когда вы устанавливаете collectionview. – blindmeis

+0

. Какое исключение и где оно выбрано? –

+0

Я обновляю свой вопрос. –

ответ

2

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

или working with the WPF Dispatcher.

+1

Ваша вторая ссылка мне поможет. Большое спасибо. –