我有一个关于在Windows Universal Apps 8.1中保存/加载数据的问题。
退出应用时,我似乎无法保存数据。我对序列化的调用是在App.xaml.cs中的OnSuspending
方法中完成的,但我不认为每当我关闭应用程序时都会调用它。
它有时会保存数据,有时则不会。这是我的OnSuspending和Save方法的代码。
private void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
// TODO: Save application state and stop any background activity
Debug.WriteLine("SUSPENDING");
HabitManager.HabitSerializer.Save();
deferral.Complete();
}
public async static void Save()
{
Debug.WriteLine("SAVED");
var json = JsonConvert.SerializeObject(HabitList.Instance.GetHabits());
var habits = HabitList.Instance.GetHabits();
foreach (var h in habits)
{
Debug.WriteLine("S: " + h);
}
StorageFile saveFile = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
await Windows.Storage.FileIO.WriteTextAsync(saveFile, json);
}
所以我的问题是,可能是什么问题,如果这不是一个好的序列化机制,你能建议我一个更好的吗?谢谢
答案 0 :(得分:2)
您的OnSuspending调用在保存调用完成之前返回。
更改保存以返回任务,以便您可以等待它:
private void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
// TODO: Save application state and stop any background activity
Debug.WriteLine("SUSPENDING");
// Wait fir Save to finish its a sync operations
await HabitManager.HabitSerializer.Save();
deferral.Complete();
}
public async static Task Save()
{
// Same save code
}
测试悬架时也要小心。应用程序在调试时不会正常暂停,但VS提供了一个暂停按钮来模拟暂停过程。