【发布时间】:2012-03-06 22:14:28
【问题描述】:
我正在 Windows 8 Metro 应用程序中开发一个简单的应用程序,我正在尝试从 PicturesLibrary 中检索文件,我输入的代码如下:
public async void Initialize()
{
IReadOnlyList<StorageFile> storageFiles = await KnownFolders.PicturesLibrary.GetFilesAsync();
foreach (var storageFile in storageFiles)
{
BitmapImage bitmapImage = new BitmapImage();
FileRandomAccessStream stream = (FileRandomAccessStream)await storageFile.OpenAsync(FileAccessMode.Read);
bitmapImage.SetSource(stream);
Image image = new Image();
image.Source = bitmapImage;
Images.Add(image);
}
}
然后我使用它们的 ImageSource 显示这些图像。 我遇到的问题是,有时它会显示所有内容,有时会显示一个 或两个,有时它不显示任何图像,我不明白这是因为等待方法 GetFileAsync() 还是我可能缺少的其他东西。
提前致谢:)
【问题讨论】:
-
为什么不试试 NON-async 方法,看看你是否始终如一地获取所有文件?
-
@jberger - 没有这样的 API 可用,Metro 有很多只异步的,就像 Silverlight 以前那样。
-
我还不熟悉 async/await,但似乎
StorageFolder.GetFilesAsync()返回了一个IAsyncOperation<IReadOnlyList>,而IAsyncOperation<IReadOnlyList>又是一个Completed事件.. -
到底发生了什么?图片在
storageFiles,但没有显示?还是他们在storageFiles中丢失了?另外,如果没有必要,您不应该编写async void方法。 -
您的内存使用情况如何?看起来您正在将所有图像读入内存。
标签: c# wpf windows-runtime async-await