Недавно мне пришлось реализовать бесконечную прокрутку/ленивую загрузку в моем PCL ListView. Я опущу большую часть кода, но самая важная часть:
Модель представления
var countries = // get countries
foreach (var country in countries)
{
// Countries is an ObservableCollection<Country>
Countries.Add(country);
}
Казалось, это отлично работает на Android, но на iOS я продолжал получать исключения из диапазона, особенно когда я быстро прокручивал список. Исправление для меня состояло в том, чтобы запустить этот код в основном потоке пользовательского интерфейса.
// wrap the code with this
Device.BeginInvokeOnMainThread(async () => {});
Теперь мой вопрос: должны ли все вызовы службы модели просмотра, которые обновляют или устанавливают наблюдаемую коллекцию, всегда выполняться в потоке пользовательского интерфейса?
У меня есть несколько команд, которые устанавливают Countries
. Кажется, они отлично работают без блока потока пользовательского интерфейса. У меня были проблемы только с добавлением элементов, как указано выше.
Следует ли всегда устанавливать и обновлять ObservableCollection в потоке пользовательского интерфейса?