Я взял следующий пример из MSDN для постепенной загрузки миниатюр в виде списка в приложении WinRT:
https://code.msdn.microsoft.com/windowsapps/Data-Binding-7b1d67b5
Я хотел бы удалить строку «ожидание Task.Delay (10)» ниже. Когда я это делаю, я получаю предупреждение о том, что в методе отсутствует оператор ожидания.
protected async override Task<IList<object>> LoadMoreItemsOverrideAsync(System.Threading.CancellationToken c, uint count)
{
uint toGenerate = System.Math.Min(count, _maxCount - _count);
// Wait for work
await Task.Delay(10);
// This code simply generates
var values = from j in Enumerable.Range((int)_count, (int)toGenerate)
select (object)_generator(j);
_count += toGenerate;
return values.ToArray();
}
Я попытался переписать метод и обернуть весь метод в задачу следующим образом:
protected async override Task<IList<object>> LoadMoreItemsOverrideAsync(System.Threading.CancellationToken c, uint count)
{
return await Task.Run(() => {
uint toGenerate = System.Math.Min(count, _maxCount - _count);
// This code simply generates
var values = from j in Enumerable.Range((int)_count, (int)toGenerate)
select (object)_generator(j);
_count += toGenerate;
return values.ToList<object>();
});
}
Однако я получаю исключения потоков:
Исключение: приложение вызвало интерфейс, который был маршалирован для другого потока. (Исключение из HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
Кажется, мне нужно запустить это в потоке пользовательского интерфейса? Но у меня нет доступа к диспетчеру.
Ищу некоторые рекомендации