Я разработал приложение WPF на основе шаблона MVVM, и мне нужно получить большой объем данных из веб-службы, и я делаю это с помощью BackgroundWorker внутри ViewModel.Чтобы изменить наблюдаемую коллекцию, мне нужно использовать диспетчер, и проблема здесь, даже если я передаю справочный UI Dispatcher, он не работает, все равно, что я использую внутренний диспетчер, и мое приложение замораживается до тех пор, пока все данные не будут получены.
Я пытаюсь получить Диспетчер пользовательского интерфейса несколькими способами: Dispatcher.CurrentDispatcher, Application.Dispatcher, App.Current.Dispatcher ... проводя некоторые исследования, я прочитал, что это должно работать, у кого-то есть какие-либо предложения?
Спасибо, Марко
Обновление
Вот некоторый код: Вот как я передаю Диспетчер в ModelView
void AppWindow_Loaded(object sender, RoutedEventArgs e)
{
this.DataContext = new ModelViewApplication(System.Windows.Threading.Dispatcher.CurrentDispatcher);
}
Затем я пытаюсь получить данные таким образом
public ModelViewApplication(Dispatcher _dispatcher)
{
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(getData);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(completedData);
bw.RunWorkerAsync();
}
public void getData(object sender, DoWorkEventArgs e)
{
_dispatcher.Invoke(DispatcherPriority.Normal,
new Action(
delegate()
{
//Connect to webservice and retrieve data
....
}));
}
Кажется, что многопоточность не работает