c# - IsolatedStorageSettings.ApplicationSettings 在 App-Restart (WP8) 后被关闭

标签 c# windows-phone-8 isolatedstorage

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

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

...计数正确,键/值正确。

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

那么是什么阻止了应用程序“使用”现有的“__ApplicationSettings”-File???

提前致谢!

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

最佳答案

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

由于您报告 _ApplicationSettings 文件不为空,我猜有 2 种可能性:也许应用程序(或其他进程?)在应用程序的第二次运行尝试打开文件时保持 _ApplicationSettings 文件打开阅读? MSFT 没有记录读取是如何完成的,所以也许文件是用 FileShare.None 或 FileShare.Read 打开的,但其他一些进程仍然打开文件进行写入?我不知道如何在模拟器上测试这个,但在真实设备上你可以尝试这个场景:

  1. 首次运行该应用,验证它保存了一个非空的 _ApplicationSettings。
  2. 重启电话设备(调试器将断开连接)
  3. 第二次运行应用程序,在 App() 构造函数中设置断点。

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

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

要检查这种可能性,首先在“输出”、“调试”窗口中查找错误消息。第二次重新启动应用程序时是否看到任何错误?

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

关于c# - IsolatedStorageSettings.ApplicationSettings 在 App-Restart (WP8) 后被关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20803515/

相关文章:

c# - 带参数的通用 Windows 平台命令

c# - C# 泛型问题,如何通过 Func 传递输入和输出

windows-phone-7 - 在 View 模型中获得用户控制权

c# - 找不到文件异常 - Windows Phone

javascript - 在 Windows 8 和 Windows Phone 8 上使用 F# 可移植库和 HTML5/Javascript

c# - 隔离存储和流程提升

c# - 将 Docker 上 ASP.NET Core 2.2 中的默认时区更改为 24 小时时间格式

c# - 打开保存的文件时出错

c# - wcf 服务服务器和客户端证书与 SSl 证书不同时的安全异常