这是我在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行! 只是为了澄清这一点:类DO中的两种方法都有效。只是SaveObjectsAsync有时不起作用,我不知道为什么。 在调试时我在所有行都设置了断点,但是当出现神秘问题时,调试会话刚刚结束,没有任何异常(是的,我设置VS 2012以显示所有类型的异常)并且数据未被序列化以便在我启动时应用程序再次,没有加载数据......
我希望我的帖子不会太长,你们都明白我遇到的问题。
提前谢谢你们!
PS:代码直接来自MS提供的其中一个Jump Start视频(31:00):link
答案 0 :(得分:0)
您是否等待SaveObjectsAsync完成?
您可以使用新的await
关键字,或者(例如,如果您从控制台应用程序的主线程调用它)通过调用返回的Task对象中的t.Wait();
方法来执行此操作。你的SaveObjectsAsync。