这是我在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):链接
您是否在等待SaveObjectsAsync完成?
您可以使用newawait
关键字来实现,也可以(例如,如果从控制台应用程序的主线程中调用它)通过t.Wait();
在SaveObjectsAsync返回的Task对象中调用method来实现。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句