У меня есть сетка данных в представлении, которое связано со списком в модели представления. У меня есть много данных, которые нужно извлечь для списка, поэтому я хочу разбить его на множество мелких поисков вместо одного большого.
Я хочу, чтобы это происходило в фоновом потоке с обновлением пользовательского интерфейса (сетка, связывающая новые данные) в конце каждого полученного пакета.
В конце каждого поиска я делаю List.AddRange () на частном бэкере, затем вызываю событие OnPropertyChanged, передавая имя открытого свойства, к которому привязана сетка.
Первоначально я пробовал это с 6 итерациями, которые получают по 100 элементов в каждой. При работе в фоновом режиме пользовательский интерфейс будет обновляться после первых 100, но не обновлять последние 500 (даже если данные были успешно добавлены в базовый список в модели представления).
Думая, что у меня возникли некоторые проблемы с маршалингом потока пользовательского интерфейса, я запустил его синхронно, ожидая, что он будет работать как положено (хотя блокирует пользовательский интерфейс при каждом извлечении) или заблокирует пользовательский интерфейс во время всех поисков - но в любом случае , обновление в конце, чтобы показать 600 пунктов. Тем не менее, он в конечном итоге делает то же самое, что и при запуске в фоновом режиме - обновляет только первые 100, а не остальные.
Ниже приведен метод, который я использую с обеими попытками, верхняя половина - закомментированная фоновая версия.
Что я делаю не так?
public void StartDataStream()
{
//Task<List<Car>> task = _taskFactory.StartNew(this._retrieveData);
//task.ContinueWith(t =>
//{
// if (this._cars == null) this._cars = new List<Car>();
// this._cars.AddRange(t.Result);
// base.OnPropertyChanged("Cars");
// this.iterations += 1;
// if (iterations < 6) StartDataStream();
//});
if (this._cars == null) this._cars = new List<Car>();
this._cars.AddRange(this.GetCarList(eq,s,e));
base.OnPropertyChanged("Cars");
this.iterations += 1;
if (iterations < 6) StartDataStream();
}