2012-04-10 52 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

相關問題