2

集合中的每个图像都有一个序列化的文件路径。加载集合时,我需要从文件路径加载图像。下面的代码将不起作用,因为 IsolatedStorageFileStream 与用于 image.SetSource() 的 IRandomAccessStream 不兼容。

public BitmapImage Image
    {
        get
        {
            var image = new BitmapImage();
            if (FilePath == null) return null;

            IsolatedStorageFileStream stream = new IsolatedStorageFileStream(FilePath, FileMode.Open, FileAccess.Read, IsolatedStorageFile.GetUserStoreForApplication());

            image.SetSource(stream);

            return image;
        }
    }

是否有替代代码来完成此操作?

4

1 回答 1

1

您可以简单地使用WindowsRuntimeStreamExtensions.AsRandomAccessStream扩展方法:

using System.IO;
...

using (var stream = new IsolatedStorageFileStream(
    FilePath, FileMode.Open, FileAccess.Read,
    IsolatedStorageFile.GetUserStoreForApplication()))
{
    await image.SetSourceAsync(stream.AsRandomAccessStream());
}

当我测试这SetSource阻止应用程序时,我使用了SetSourceAsync.


您也许还可以像这样直接访问独立存储文件夹:

var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
    FilePath, CreationCollisionOption.OpenIfExists);

using (var stream = await file.OpenReadAsync())
{
    await image.SetSourceAsync(stream);
}
于 2015-12-28T21:33:18.900 回答