【问题标题】:In WP7, data is not saved immediately after writing to IsolatedStorage在 WP7 中,数据不会在写入到 IsolatedStorage 后立即保存
【发布时间】:2012-04-10 11:02:20
【问题描述】:

我在完善我的 WP7 应用程序时遇到了这个问题。

虽然我遵循 Microsoft 的指南在游戏停用时存储游戏状态,但我还想在运行时保存一些数据。

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

当用户在玩游戏时不小心从她的设备中取出电池时,就会出现问题 - 所有游戏进度都会丢失。

这就是为什么我会在一些中间检查点保存游戏状态,但我注意到数据不会立即存储。这是我的“保存”功能:

    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() 好像没有效果。

这种行为是平台功能吗?

市场应用程序的 Microsoft 认证可以吗?

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

【问题讨论】:

  • “市场应用程序的 Microsoft 认证可以吗?” -> 你不应该处理这种情况,所以不用担心认证。
  • 您说“在它被调用之后”——您是否正在检查该方法是否实际执行完毕?它可能没有你想象的那么快完成。

标签: windows-phone-7 isolatedstorage


【解决方案1】:

当您需要刷新数据时,只需致电stream.Close

另外,请尝试致电stream.Flush(true);

【讨论】:

  • 流上的 Dispose 应该有同样的效果。
  • 感谢您的提示。我都明确地尝试过,但没有任何效果。 'using' 语句确保 stream.Dispose() 被隐式调用。根据 MSDN,处理 IsolatedStorageFileStream 将关闭流。
【解决方案2】:

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

【讨论】:

  • 感谢您的回答。我对独立存储的缓慢性能感到满意。但是,最好同步完成保存过程,或者至少在完成时触发回调。在我目前的实现中,这两者都没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多