Application-Restart(WP8)后,IsolatedStorageSettings.ApplicationSettings被解除

时间:2013-12-27 15:47:28

标签: c# windows-phone-8 isolatedstorage

在调试模式和释放模式下,仿真器和实际设备都会发生这种情况。
在应用程序中,我成功地存储了几个应用程序设置 - 从简单的值类型到更复杂的对象和对象列表 使用“ WP POWER TOOLS ”,我可以在IsolatedStorage的根目录中跟踪文件“ __ ApplicationSettings ”。它是“充分填充” - 在第一行中我找到了一些定义复杂类型定义的类和程序集,而在XML下面以<ArrayOfKeyValueOfstringanyType...>开头 所以,到目前为止,一切看起来都很正常。 当我关闭我的应用时,最后一段正在运行的代码是“ Application_Closing ” - App.xaml.cs 中的处理程序。在这一刻,我可以最后一次检查ApplicationSettings - 一切都好。 例如:我检查条目的数量:

var count = System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.Count;

...并且计数是正确的,键/值是正确的。

然后 - 我立即重新启动应用程序(Visual-Studio-Debugging不会中断)应用程序中的第一段运行代码应用程序中的 App() .xaml.cs 即可。
在第一行中,我再次检查ApplicationSettings-Entries的计数,并且: 0 !!!
但是: WP POWER TOOLS 仍然告诉我,“ __ ApplicationSettings ” - 文件已存在且仍然像以前一样填充。 (此错误的后果是,在第一次尝试再次保存任何设置时,整个__ApplicationSettings-File被覆盖并仅包含一个新设置。)

那么可能阻止应用程序“使用”现有的“ __ ApplicationSettings ” - 文件???

提前致谢!

(PS 1:我已经经历过,当保存设置时发生异常时,所有ApplicationSettings都被销毁。我已经调查了所有这些并且99.9%肯定,不再有Exception了。)
(PS 2:只是说清楚:事实并非如此,完整的IsolatedStorage已经消失了。我还有另一个用于记录目的的文件,我写入了IsolatedStorage的根目录。这个文件总是那个__ApplicationSettings文件也没有被“删除”,看起来,应用程序在启动时没有“读取”它。)

2 个答案:

答案 0 :(得分:0)

您是否在设置上致电Save?它会抛出任何错误吗?

答案 1 :(得分:0)

我尝试了我的应用程序的repro场景并确认了我的预期,IsolatedStorageSettings.ApplicationSettings.Count在进入App()ctor时在非同一模拟器进程中第二次运行应用程序时非零。所以你也希望能够达到这个理想的状态!

由于您报告_ApplicationSettings文件不为空,我猜两种可能性:当应用程序的第二次运行尝试打开文件时,可能是应用程序(或其他一些进程?)保持_ApplicationSettings文件处于打开状态读? MSFT没有记录读取的完成方式,因此可能使用FileShare.None或FileShare.Read打开文件,但是其他一些进程仍然打开文件进行写入?我不知道如何在模拟器上测试它,但在真实设备上你可能会尝试这种情况:

  1. 首次运行该应用,验证它是否保存了非空_ApplicationSettings。
  2. 重新启动手机设备(调试程序将断开连接)
  3. 第二次运行应用程序,在App()ctor。
  4. 中使用断点

    2)之后我会相信没有其他进程可以打开文件,因此应用程序应该能够不受干扰地读取其内容。但是如果你发现它在3)中仍然没有计数,那么存在另一种可能性:

    也许重新启动的应用程序在尝试将文件中的设置反序列化为数据结构时遇到错误?当第一次运行应用程序退出时,该错误可能无法阻止数据序列化。

    要检查这种可能性,首先在Output,Debug窗口中查找错误消息。你第二次重启应用程序时是否看到任何错误?

    如果您没有看到任何有用的错误消息,接下来要尝试的是简化作为设置保存的数据结构。尝试简化为一个简单类型的设置,如int或string。看看是否可以正确恢复,然后将更多设置添加回文件,直到您找到导致问题的设置为止。