0

我从链接ImageCaching中找到了一个类, 但是当我从隔离存储加载时,我得到了一个异常“System.InvalidOperationException”

这是我的代码

 public static object DownloadFromWeb(Uri imageFileUri)
    {
        WebClient m_webClient = new WebClient();                                //Load from internet
        BitmapImage bm = new BitmapImage();

        m_webClient.OpenReadCompleted += (o, e) =>
        {
            if (e.Error != null || e.Cancelled) return;
            WriteToIsolatedStorage(IsolatedStorageFile.GetUserStoreForApplication(), e.Result, GetFileNameInIsolatedStorage(imageFileUri));
            bm.SetSource(e.Result);
            e.Result.Close();
        };
        m_webClient.OpenReadAsync(imageFileUri);
        return bm;
    }

    public static object ExtractFromLocalStorage(Uri imageFileUri)
    {
        byte[] data;
        string isolatedStoragePath = GetFileNameInIsolatedStorage(imageFileUri);       //Load from local storage
        if (null == _storage)
        {
             _storage = IsolatedStorageFile.GetUserStoreForApplication();
        }
        using (IsolatedStorageFileStream sourceFile = _storage.OpenFile(isolatedStoragePath, FileMode.Open, FileAccess.Read))
        {


            // Read the entire file and then close it
            sourceFile.Read(data, 0, data.Length);
            sourceFile.Close();
           BitmapImage bm = new BitmapImage();
            bm.SetSource(sourceFile);///here got the exeption 
            return bm;

        }

    }

所以我无法设置图像。

4

1 回答 1

0

我正在使用您提到的转换器,它可以工作,但您修改了方法。

您的 ExtractFromLocalStorage 方法不一样。在使用 SetSource 方法之前关闭流。

这是原始方法代码:

 private static object ExtractFromLocalStorage(Uri imageFileUri)
    {
        string isolatedStoragePath = GetFileNameInIsolatedStorage(imageFileUri);       //Load from local storage
        using (var sourceFile = _storage.OpenFile(isolatedStoragePath, FileMode.Open, FileAccess.Read))
        {
            BitmapImage bm = new BitmapImage();
            bm.SetSource(sourceFile);
            return bm;
        }
    }
于 2013-01-20T13:46:45.720 回答