从独立存储读取时引发异常“不允许对隔离存储文件流执行操作”
本文关键字:存储文件 隔离 执行 操作 不允许 读取 存储 独立 异常 | 更新日期: 2023-09-27 17:55:21
在我的应用程序中,我必须从远程服务器下载所有图像并将其显示在列表视图中。当我尝试从独立存储中提取图像时,出现异常
"不允许在隔离存储文件流上操作"
.这是我的代码
public static object ExtractFromLocalStorage(Uri imageFileUri)
{
byte[] data;
string isolatedStoragePath = GetFileNameInIsolatedStorage(imageFileUri); //Load from local storage
if (null == _storage)
{
_storage = IsolatedStorageFile.GetUserStoreForApplication();
}
BitmapImage bi = new BitmapImage();
//HERE THE EXCEPTION OCCURS
using (IsolatedStorageFileStream sourceFile = _storage.OpenFile(isolatedStoragePath, FileMode.Open, FileAccess.Read))
{
data = new byte[sourceFile.Length];
// Read the entire file and then close it
sourceFile.Read(data, 0, data.Length);
// Create memory stream and bitmap
MemoryStream ms = new MemoryStream(data);
// Set bitmap source to memory stream
bi.SetSource(ms);
sourceFile.Close();
}
return bi;
}
上面的函数用于从独立存储中获取位图图像,我的模型类是
public class Details
{
public string id { get; set; }
public string name { get; set; }
public Uri imgurl { get; set; }
[IgnoreDataMember]
public BitmapImage ThumbImage{get;set;}
}
我正在使用一个 Singlton 类来调用函数来获取图像。
public class SingleTon
{
static SingleTon instance = null;
private SingleTon()
{
}
public static SingleTon Instance()
{
if (instance == null)
{
instance = new SingleTon();
}
return instance;
}
public BitmapImage getImage(Uri uri)
{
lock (this)
{
BitmapImage image = new BitmapImage();
image = (BitmapImage)CacheImageFileConverter.ExtractFromLocalStorage(uri);
return image;
}
}
public void writeImageToIsolatedStorage(Uri imageUri)
{
lock (this)
{
CacheImageFileConverter.DownloadFromWeb(imageUri);
}
}
}
这是将图像设置为对象的代码
SingleTon singleton = SingleTon.Instance();
List<(Details > datalist = new Details()
foreach (Details items in DataList)
{
items.ThumbImage = singleton.getImage(items.imgurl );
datalist.add(items);
}
请任何人帮我解决问题。
如果尚未关闭以前打开的同一文件的流,通常会发生此异常。检查CacheImageFileConverter.DownloadFromWeb
并确保输出流包装在using
块中。
如果文件不存在,也可能抛出该异常,但我不是 100% 确定。也许在你打开它之前通过一个电话IsolatedStorageFile.FileExists()
只是为了确定。