2012-04-10 53 views
0

在抛光我的WP7应用程序时遇到此问题。在WP7中,写入IsolatedStorage后数据不会立即保存

虽然我按照微软的准则来存储游戏状态,当它被停用,我也想保存在运行时的一些数据。

这样做的原因是,当将电池从设备上移除,没有失活/关闭回调被触发。

这个问题是当用户走过的游戏,不小心删除电池从她的装置 - 所有游戏进度都将丢失。

这就是为什么我做保存在某个中间检查站的比赛状态,但我注意到,数据不会立即存储。这是我的“保存”功能:

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应用程序的微软认证的条款?

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

+0

“是精在Marketplace应用程序的微软认证的术语” - >你不应该来处理这种情况,所以不用担心认证。 – 2012-04-10 11:11:26

+0

您说“调用后” - 您是否检查该方法是否实际执行完?它可能没有像你想象的那么快完成。 – 2012-04-10 14:46:24

回答

0

这可能对于独立存储的性能是很有意思:forums.create.msdn.com/forums/p/71708/71708.aspx

+0

谢谢你的回答。我对孤立存储的性能表现不错。但是,保存过程同步完成或至少在完成时触发回调会更好。在我目前的实施中,它没有这些。 – mbakulin 2012-04-10 12:09:03

2

只要打电话stream.Close当你需要刷新您的数据。

此外,尝试调用stream.Flush(true);

+0

流上的Dispose应该具有相同的效果。 – 2012-04-10 15:48:33

+0

谢谢你的提示。我试图明确无效。 'using'语句确保了stream.Dispose()被隐式调用。根据MSDN,处置IsolatedStorageFileStream将关闭流。 – mbakulin 2012-04-11 04:30:21

相关问题