从独立存储读取时引发异常“不允许对隔离存储文件流执行操作”

本文关键字:存储文件 隔离 执行 操作 不允许 读取 存储 独立 异常 | 更新日期: 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()只是为了确定。