Если папка содержит много файлов (>300..1000), а дисковод работает не очень быстро, то я не могу получить код для надежной загрузки полного списка файлов. Сначала он загружает несколько файлов (например, 10 или 100, в зависимости от положения Луны). Следующие попытки (запуска того же кода) вернут немного больше, например 200, но нет гарантии, что это число будет расти.
Я пробовал много вариантов, в том числе:
res = new List<StorageFile>(await query.GetFilesAsync());
а также:
public async static Task<List<StorageFile>> GetFilesInChunks(
this StorageFileQueryResult query)
{
List<StorageFile> res = new List<StorageFile>();
List<StorageFile> chunk = null;
uint chunkSize = 200;
bool isLastChance = false;
try
{
for (uint startIndex = 0; startIndex < 1000000;)
{
var files = await query.GetFilesAsync(startIndex, chunkSize);
chunk = new List<StorageFile>(files);
res.AddRange(chunk);
if (chunk.Count == 0)
{
if (isLastChance)
break;
else
{
/// pretty awkward attempt to rebuild the query, but this doesn't help too much :)
await query.GetFilesAsync(0, 1);
isLastChance = true;
}
}
else
isLastChance = false;
startIndex += (uint)chunk.Count;
}
}
catch
{
}
return res;
}
Этот код выглядит немного сложным, но я уже пробовал его более простые варианты :(
Буду рад вашей помощи в этом..