Обновление ObservableCollection без зависания пользовательского интерфейса

Можно ли обновить большую коллекцию ObservableCollection (т.е. добавить элементы) без зависания U.I.?

Мне интересно, связано ли это с тем, что у меня есть относительно большой цикл (500 итераций), где каждая итерация добавляет элемент в коллекцию.

ИЛИ, будь то факт, что коллекция обновляется и уведомляет пользовательский интерфейс об изменении.

Или оба!

Я наткнулся на эту ветку, но это может быть совсем другой вопрос относительно диспетчера (зачем использовать справку диспетчера?): Использование BackgroundWorker для обновления пользовательского интерфейса без зависаний ...?


person AlvinfromDiaspar    schedule 01.11.2010    source источник


Ответы (1)


Проверьте этот предыдущий ответ SO < / а>.

ObservableCollection не позволяет вам отключать и повторно включать события, которые запускаются для изменений, но, похоже, вы можете с помощью BindingList.

person Erik Noren    schedule 01.11.2010
comment
Прохладный. Надеюсь, у SL есть обязательные списки. Я обязательно пойду этим маршрутом, если смогу. Но пока я хотел бы знать, поможет ли обновление коллекции при асинхронном завершенном событии через Dispatcher облегчить «зависания» пользовательского интерфейса. Кто-нибудь может подтвердить или опровергнуть это? - person AlvinfromDiaspar; 01.11.2010
comment
Диспетчер не поможет. Все, что это делает, - это маршалинг для вас перекрестный доступ. (Например, если вы хотите обновить какой-либо пользовательский интерфейс из другого потока, вы используете Dispatcher для вызова команд пользовательского интерфейса.) Ваша коллекция по-прежнему будет вызывать события при каждом изменении коллекции, и все слушатели будут уведомлены. Поскольку они подписываются на события с помощью многоадресных делегатов, их уведомления поступают в новые потоки, и, таким образом, они не блокируются или блокируются для ваших наблюдаемых обновлений коллекции. Можете ли вы внести обновления в IEnumerable, а затем сделать ObservableCollection? - person Erik Noren; 02.11.2010