Windows Phone 8开发:OpenStreamForWriteAsync无法正常工作?

时间:2013-08-10 21:58:51

标签: c# windows-phone-8

这是我在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

1 个答案:

答案 0 :(得分:0)

您是否等待SaveObjectsAsync完成?

您可以使用新的await关键字,或者(例如,如果您从控制台应用程序的主线程调用它)通过调用返回的Task对象中的t.Wait();方法来执行此操作。你的SaveObjectsAsync。