Почему этот код Silverlight получает «катастрофический сбой» при чтении BitmapImage из IsolatedStorage? - PullRequest
1 голос
/ 14 апреля 2010

В приложении Silverlight я сохраняю Растровое изображение , например:

public static void SaveBitmapImageToIsolatedStorageFile(OpenReadCompletedEventArgs e, string fileName)
{
    using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName, FileMode.Create, isf))
        {
            Int64 imgLen = (Int64)e.Result.Length;
            byte[] b = new byte[imgLen];
            e.Result.Read(b, 0, b.Length);
            isfs.Write(b, 0, b.Length);
            isfs.Flush();
            isfs.Close();
            isf.Dispose();
        }
    }
}

и , читаем , возвращаем так:

public static BitmapImage LoadBitmapImageFromIsolatedStorageFile(string fileName)
{
    string text = String.Empty;

    using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
    {
        if (!isf.FileExists(fileName))
            return null;

        using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (IsolatedStorageFileStream isoStream = isoStore.OpenFile(fileName, FileMode.Open))
            {
                BitmapImage bitmapImage = new BitmapImage();
                bitmapImage.SetSource(isoStream);
                return bitmapImage; // "Catastrophic Failure: HRESULT: 0x8000FFFF (E_UNEXPECTED))"
            }
        }
    }
}

, но это всегда дает мне ошибку " Катастрофический сбой: HRESULT: 0x8000FFFF (E_UNEXPECTED)) * ".

Я уже видел эту ошибку раньше, когда япопытался прочитать png файл с сервера, который на самом деле был текстовым файлом , поэтому я предполагаю, что растровое изображение не сохраняется правильно, я получил код здесь .

Может кто-нибудь увидеть, как BitmapImage не сохраняется правильно?Или почему это выдает мне эту ошибку?

Обновление:

Когда создается BitmapImage, я вижу, что записываемый массив байтов имеет длину 1876 байтови все они 0. Почему это будет?

1 Ответ

1 голос
/ 14 апреля 2010

Я получил его на работу, но неясно, почему именно.Я звонил SaveBitmapImageToIsolatedStorageFile (...) после этого кода:

BitmapImage bitmapImage = new BitmapImage();
bitmapImage.SetSource(e.Result);
Image image = new Image();
image.Source = bitmapImage;

Если я назову его до этого кода, тогда он работает.1009 * Очевидно, SetSource () обнуляет байты в e.Result , но сохраняет длину?

...