0

これは、stackoverflow に関する私の最初の投稿であり、期待どおりにすべてを行っていることを願っています。すでに検索機能を使用しましたが、役に立ちそうなものは何も見つかりませんでした。

私が抱えている問題は、ファイルへのストリームを開くために使用される OpenStreamForWriteAsync() メソッドに関係しています。コードが期待どおりに実行される場合があります (ストリームが開かれている、自分のものを書いているなど)。しかし、他の場合には、ストリームを待っている時点でプログラムが終了します。例外をスローしないので、なぜそうなるのかわかりません。

コードは次のとおりです。

class MyDataSerializer<T>
{
    public static async Task SaveObjectsAsync(T sourceData, string targetFileName) {
        StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(targetFileName, CreationCollisionOption.ReplaceExisting);
        var outStream = await file.OpenStreamForWriteAsync();//PROBLEM HERE
        DataContractSerializer serializer = new DataContractSerializer(typeof(T));
        serializer.WriteObject(outStream, sourceData);
        await outStream.FlushAsync();
        outStream.Close();
    }

    public static async Task<T> RestoreObjectsAsync(string fileName) {
        StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
        var inStream = await file.OpenStreamForReadAsync();

        DataContractSerializer serializer = new DataContractSerializer(typeof(T));
        T data = (T)serializer.ReadObject(inStream);
        inStream.Close();

        return data;
    }
}

問題は 5 行目で発生します。これを明確にするために、クラスの両方のメソッドが機能します。SaveObjectsAsync が機能しないことがあり、その理由がわかりません。デバッグ中にすべての行にブレークポイントを設定しましたが、不思議な問題が発生すると、デバッグセッションは例外なく終了し (はい、VS 2012 であらゆる種類の例外を表示するように設定しました)、データはシリアル化されないため、開始時にアプリをもう一度、データがロードされていません...

私の投稿が長すぎず、私が抱えている問題を理解していただければ幸いです。

よろしくお願いします!

PS: コードは、MS が提供するジャンプ スタート ビデオの 1 つ (31:00) から直接引用しています:リンク

4

1 に答える 1