Приоритет анимации «Загрузка» - PullRequest
0 голосов
/ 02 апреля 2012

Я использую Infragistics XamDataGrid для своей сетки. Это связано с ObservableCollection.

Когда в выпадающем списке в окне делается выборка, в фоновом потоке делается запрос данных и запускается анимация загрузки. По мере получения данных необходимая работа выполняется в фоновом потоке.

Проблема, с которой я сталкиваюсь, заключается в том, что, как только все данные будут готовы, мне нужно обновить коллекцию, к которой привязана сетка. Это должно быть сделано в потоке пользовательского интерфейса. Итак, что происходит, когда XamDataGrid выполняет работу над потоком пользовательского интерфейса, чтобы справиться с изменением коллекции, моя анимация перестает анимироваться.

Насколько я могу судить, я мало что могу сделать, поскольку загрузка сетки и анимация должны происходить в одном потоке пользовательского интерфейса.

Есть что-то, что я мог пропустить? Как сохранить анимацию во время работы сетки для отображения новых строк?

1 Ответ

1 голос
/ 02 апреля 2012

Первое, что я хотел бы сделать, это выяснить, где стоимость производительности. Упростите свой пользовательский интерфейс и используйте WPFPerf, чтобы попытаться выяснить это. Вы можете обнаружить, что у вас есть особенно дорогой шаблон данных в вашей таблице, например.

Если у вас все еще есть проблемы с производительностью, вы можете группировать свои обновления в небольшие группы, каждый из которых запускается в отдельном диспетчерском сообщении. Псевдо-код:

// running on BG thread
var data = server.GetTheData();

// have the data, so marshal back to the UI thread in batches of 5
foreach (var batch in data.Batch(5))
{
    dispatcher.Invoke(..., batch);
}
...