C# 在退出Windows Phone 8.1(通用应用程序)时保存数据

C# 在退出Windows Phone 8.1(通用应用程序)时保存数据,c#,win-universal-app,C#,Win Universal App,我有一个关于在Windows Universal Apps 8.1中保存/加载数据的问题 退出应用程序时,我似乎无法保存数据。我对序列化的调用是在App.xaml.cs中的onsuspend方法中完成的,但我认为在我关闭应用程序时不会调用它 它有时保存数据,有时不保存。这是我的OnSuspending和Save方法代码 private void OnSuspending(object sender, SuspendingEventArgs e) { var

我有一个关于在Windows Universal Apps 8.1中保存/加载数据的问题

退出应用程序时,我似乎无法保存数据。我对序列化的调用是在App.xaml.cs中的
onsuspend
方法中完成的,但我认为在我关闭应用程序时不会调用它

它有时保存数据,有时不保存。这是我的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);

    }

所以我的问题是,有什么问题,如果这不是一个好的序列化机制,你能给我推荐一个更好的吗?谢谢您

您的暂停通话在保存通话结束前返回

更改“保存”以返回任务,以便您可以等待它:

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提供了一个挂起按钮来模拟挂起过程。

您是否节省了很多钱?暂停的允许运行时间有时间限制。@Brian Rasmussen不是真的,我只是想在退出应用程序时保存。谢谢,我昨天就这样更改了代码,但忘了更新答案。