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

神经巫师

这是我在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章