0

这是我在 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):链接

4

1 回答 1

0

您是否等待 SaveObjectsAsync 完成?

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

于 2013-08-10T23:50:42.597 回答