При таком количестве обновлений в секунду вы будете получать сообщения об обновлениях «в резервной копии» в очереди, поэтому ваши фоновые обновления блокируются.
Чтобы решить эту проблему, вам нужно ограничитьколичество генерируемых событий обновления.
Я бы использовал такой подход:
В моих ViewModels замените обычную реализацию INotifyPropertyChanged вызовом одноэлементного объекта, который отправитуведомление от имени этого объекта.
private void OnPropertyChanged(string propertyName)
{
PropertyChangedNotifier.Notify(this, propertyName, propertyChanged);
}
Где propertyChanged
- переменная-член, хранящая обработчики событий этого объекта.
Метод Notify
будет выглядеть примерно так:
public static void Notify(
object sender,
string propertyName,
PropertyChangedEventHandler handlers)
{ ... }
В уведомителе не отправлять событие немедленно - просто сохранить факт, что его нужно отправить.
Если вы получаете уведомление несколько раз для одного и того же объекта / свойства, откажитесь от дополнительных уведомлений.Если вы получаете уведомление много раз для одного и того же объекта, но с разными свойствами, замените уведомление на одно для всех свойств .
Теперь используйте таймер потока UX, чтобы «освободить» уведомлениякаждые 50 мс или около того - все еще достаточно быстро, чтобы пользователь не заметил никакой разницы, и это выглядит как обновления в реальном времени, но достаточно медленно, чтобы обнаруживать (и удалять) дублирующиеся уведомления.