0

次のコードを使用して、IsolatedStorageFile からキャッシュされた画像を読み取ります。

using (IsolatedStorageFile storageFile = IsolatedStorageFile.GetUserStoreForApplication())
{
    using (IsolatedStorageFileStream stream = storageFile.OpenFile(filename, FileMode.Open, FileAccess.Read))
    {
        BitmapImage result = new BitmapImage();
        result.SetSource(stream);
        return result;
    }
}

時々、次の例外が発生します。

ここに画像の説明を入力

詳細には次のテキストがあります。

オフセットと長さが配列の範囲外であるか、カウントがインデックスからソース コレクションの末尾までの要素数を超えています

何か案は?これが問題かどうかはわかりませんが、このコードは重いマルチスレッド環境でアクセスされます (つまり、これらの行を呼び出すスレッドがたくさんあるということです)。

これが最初のチャンスの例外であることは知っていますが、とにかく理由がわかりません。

4

2 に答える 2

1

非常によく似たコードで同じエラーが発生しました。私の経験では、破損した写真ファイルでのみ発生します。写真はすべて CameraCaptureTask によって生成されたものであり、エラーを再現できたことはありませんが、実際に発生します。

エラーメッセージは少し誤解を招きます。

私は明示的にファイル ストリームで Close+Dispose を呼び出していますが、それは "using" 宣言と同等です。ignacio は上記の返信で正しいです。

于 2015-04-21T08:57:27.017 に答える
0

問題を解決するストリーム オブジェクトの 2 番目の using ステートメントを削除します。

于 2014-12-28T00:20:39.923 に答える