我在完善我的 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 认证而言,是否可以?
或者有没有办法立即保存数据?