Я разработал приложение WPF на основе шаблона MVVM, и мне нужно получить большой объем данных из веб-службы, и я делаю это с помощью BackgroundWorker внутри ViewModel. Чтобы изменить наблюдаемую коллекцию, я должен использовать диспетчер, и проблема здесь, даже если я передаю ссылку на диспетчер пользовательского интерфейса, он не работает, это похоже на то, что я использую внутренний диспетчер, и мое приложение зависает до тех пор, пока все данные не будут восстановлены.
Я пытаюсь получить Диспетчер пользовательского интерфейса несколькими способами: Dispatcher.CurrentDispatcher, Application.Dispatcher, App.Current.Dispatcher... проведя некоторые исследования, я прочитал, что это должно работать, есть ли у кого-нибудь предложения?
Спасибо, Марко.
Обновить
Вот некоторый код: Вот как я передаю 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
....
}));
}
Похоже, многопоточность не работает
BackgroundWorker
, а не сDispatcher
. Покажите нам код. - person Snowbear   schedule 18.08.2011//connect to webservice
вы получаете доступ к этому объекту из рабочего потока. - person   schedule 18.08.2011