これは、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) から直接引用しています:リンク