2014-10-22 2 views
0

У меня есть вопрос относительно сохранения/загрузки данных в Windows Universal Apps 8.1.Сохранить данные на выходе Windows Phone 8.1 (Универсальные приложения)

Я не могу сохранить данные при выходе из приложения. Мой вызов сериализации выполняется в методе OnSuspending в App.xaml.cs, но я не думаю, что он вызывается всякий раз, когда я закрываю приложение.

Иногда он сохраняет данные, иногда нет. Вот мой код для методов 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); 

    } 

Так что мой вопрос, в чем может быть проблема, и если это не хороший механизм сериализация, вы можете предложить мне лучший друг? Спасибо

+1

Вы экономите много? Существует ограничение времени на то, как долго «OnSuspending» позволяет запускать. –

+0

@Brian Rasmussen На самом деле, я просто хочу, чтобы он сэкономил, когда я выхожу из приложения –

ответ

2

Ваш вызов 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"); 
    // Wait fir Save to finish its a sync operations 
    await HabitManager.HabitSerializer.Save(); 
    deferral.Complete(); 
} 

public async static Task Save() 
{ 
    // Same save code 
} 

быть также осторожны при тестировании подвески. Приложение не будет приостанавливаться нормально во время отладки, но VS предоставляет кнопку приостановки для имитации процесса приостановки.

+0

Спасибо, я вчера изменил свой код, но забыл обновить свой ответ. –

Смежные вопросы