0

在我的应用程序中,我必须从远程服务器下载所有图像并将其显示在列表视图中。当我尝试从隔离存储中提取图像时出现异常

“IsolatedStorageFileStream 上不允许操作”

.这是我的代码

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;}
}

我正在使用一个单例类来调用函数来获取图像。

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);    

    }

请任何人帮助我解决问题。

4

1 回答 1

0

如果您没有关闭以前打开的流到同一文件,通常会发生此异常。检查CacheImageFileConverter.DownloadFromWeb并确保您的输出 Stream 包装在一个using块中。

如果文件不存在,也可能会引发该异常,但我不确定 100%。也许IsolatedStorageFile.FileExists()在你打开它之前通过一个电话来确定。

于 2013-01-24T02:22:21.970 回答