在WP7中,写入IsolatedStorage后不会立即保存数据

时间:2012-04-10 11:02:20

标签: windows-phone-7 isolatedstorage

我在抛光WP7应用程序时遇到了这个问题。

虽然我遵循微软的指导方针来存储游戏状态,但我也希望在运行时保存一些数据。

原因是当从设备中取出电池时,不会触发停用/关闭回调。

当用户走过游戏并意外地从她的设备中取出电池时,问题出现了 - 所有游戏进度都将丢失。

这就是我在一些中间检查点保存游戏状态的原因,但我注意到数据没有立即存储。这是我的“保存”功能:

    public void SaveAppModelToIsolatedStorage()
    {
        using (var store = IsolatedStorageFile.GetUserStoreForApplication())
        using (var stream = new IsolatedStorageFileStream(APPMODEL_DATAFILE,
                                                          FileMode.Create,
                                                          FileAccess.Write,
                                                          store))
        {
            var serializer = new XmlSerializer(typeof(AppModel));

            try
            {
                serializer.Serialize(stream, AppModel);
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Cant serialize AppModel:" + ex.Message);
            }
        }
    }

在调用之后,如果我在几秒钟内取出电池(不确定多少但总是少于30),应用程序最终会丢失游戏进度。如果我在取出电池前等待,数据将成功保存。在各种WP7手机上都会出现这种情况。

我还尝试序列化到字符串缓冲区,然后通过调用stream.Write()将该字符串缓冲区写入文件,但结果是一样的。此外,stream.Flush()似乎没有效果。

此行为是平台功能吗?

对于Marketplace应用的Microsoft认证是否合适?

或者有没有办法立即保存数据?

2 个答案:

答案 0 :(得分:2)

当您需要清理数据时,只需致电stream.Close

另外,请尝试拨打stream.Flush(true);

答案 1 :(得分:0)

这对于隔离存储的性能可能很有意义:forums.create.msdn.com/forums/p/71708/71708.aspx