Я пишу приложение WPF, используя подход MVVM.В моей ViewModel у меня есть ObservableCollection.Периодически моему приложению необходимо проверять наличие новых сообщений и, если они есть, добавлять их в коллекцию ObservableCollection.
Если я пытаюсь добавить коллекцию ObservableCollection в DoWork, это не работаетиз-за проблем с синхронизацией потоков.Похоже, что самый простой способ добиться этого в потоке пользовательского интерфейса - это сделать ReportProgress () и обновить коллекцию оттуда.
Мой вопрос: философски и технически, нормально ли обновлять пользовательский интерфейс?от обработчика ReportProgress, хотя "по букве закона" я на самом деле не сообщаю о прогрессе.
Есть ли более разумный способ сделать это?
* РЕДАКТИРОВАТЬ: Код работает с использованием Dispatcher Timer *
ViewModel
class MyViewModel
{
public ObservableCollection<string> MyList { get; set; }
public MyViewModel()
{
MyList = new ObservableCollection<string>();
}
}
"кодекс" - просто пример, а не код моего приложения.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
MyViewModel mvm = new MyViewModel();
this.DataContext = mvm;
DispatcherTimer mytimer = new DispatcherTimer();
mytimer.Interval = TimeSpan.FromSeconds(5.0);
mytimer.Tick += new EventHandler(mytimer_Tick);
mytimer.Start();
}
void mytimer_Tick(object sender, EventArgs e)
{
((DispatcherTimer)sender).Stop();
MyViewModel mvm = this.DataContext as MyViewModel;
mvm.MyList.Insert(0, DateTime.Now.ToLongTimeString());
((DispatcherTimer)sender).Start();
}
Похоже, это будет работать хорошо для того, что мне нужно, и не даст мне дополнительный багаж, который я не собираюсь использовать (например, отмена, работник завершен и т. Д.).