我在窗口电话8.1中编写了一个功能来显示文件夹上的图像(假设我在此文件夹中有 60张图像)。当我创建流来获取bitmapImage时,问题是函数GetThumbnailAsync()需要很长时间。 这是我的代码
//getFileInPicture is function get all file in picture folder
List<StorageFile> lstPicture = await getFileInPicture();
foreach (var file in lstPicture)
{
var thumbnail = await file.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.PicturesView,50);
var bitmapImage = new BitmapImage();
bitmapImage.DecodePixelWidth = (int)(ScreenWidth / 4);
await bitmapImage.SetSourceAsync(thumbnail);
g_listBitmapImage.Add(bitmapImage);
//g_listBitmapImage is a list of bitmapImage
}
我正在测试并且发现问题是函数GetThumbnailAsync花了这么长时间。 如果我有大约60张图片,则需要大约15秒来完成此功能(我在lumia 730中测试)。 是否有人遇到此问题以及如何让此代码运行得更快? 。
非常感谢您的支持
答案 0 :(得分:5)
您当前正在等待file.GetThumbnailAsync
每个文件,这意味着尽管该函数是为每个文件异步执行的,但它是按顺序执行的,而不是并行执行的。
尝试将从file.GetThumbnailAsync
返回的每个异步操作转换为Task
,然后将其存储在列表中,然后使用await
将Task.WhenAll
所有任务存储起来。
List<StorageFile> lstPicture = await getFileInPicture();
List<Task<StorageItemThumbnail>> thumbnailOperations = List<Task<StorageItemThumbnail>>();
foreach (var file in lstPicture)
{
thumbnailOperations.Add(file.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.PicturesView,50).AsTask());
}
// wait for all operations in parallel
await Task.WhenAll(thumbnailOperations);
foreach (var task in thumbnailOperations)
{
var thumbnail = task.Result;
var bitmapImage = new BitmapImage();
bitmapImage.DecodePixelWidth = (int)(ScreenWidth / 4);
await bitmapImage.SetSourceAsync(thumbnail);
g_listBitmapImage.Add(bitmapImage);
//g_listBitmapImage is a list of bitmapImage
}