这是我在 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 提供的 Jump Start 视频之一(31:00):链接