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出力ストリームがusingブロックにラップされていることを確認してください。

ファイルが存在しない場合にもその例外スローされる可能性がありますが、100%確実ではありません。IsolatedStorageFile.FileExists()念のため、開く前にへの呼び出しをスルーすることもできます。

于 2013-01-24T02:22:21.970 に答える