WP7上隔离存储的意外行为

时间:2011-04-27 03:11:22

标签: windows-phone-7 isolatedstorage

我使用独立存储获得了一些意想不到的行为。在这种情况下,我使用它来维持状态以进行墓碑化。

这是Ham Radio许可考试练习应用程序。这是发生了什么。当应用程序首次运行时,用户在MainPage上,并选择两个链接之一,OptionPage1或OptionPage2(它们的工作方式类似,所以我只关注一个)。在OptionsPage1上,用户从许多选项中进行选择,然后单击“启动”按钮转到“检查页面”,用户在该页面中回答问题。完成考试后,用户前往ScorePage查看分数。完成此操作后,其中一个选项是单击按钮返回MainPage。

每次用户选择某个操作时,隔离存储中的文件都会使用隔离存储处理类库中的静态方法进行更新。我观察到一种非常奇怪的行为。当ScorePage在用户单击以返回MainPage时保存其状态时,它将位置存储为“MainPage”,因为这是用户将在下一毫秒内的位置。但是,当MainPage读取刚刚由ScorePage保存的隔离存储文件时,它与ScorePage保存的内容不同!它具有OptionPage1保存的内容!!我知道ScorePage正在保存信息,因为我在保存后立即尝试阅读它并且没问题。

几乎看起来可能有不同版本的文件正在创建和更新。但这毫无意义。每个页面使用完全相同的静态方法来保存和更新隔离的存储文件,并且只有一个文件夹和文件名。我很困惑。

1 个答案:

答案 0 :(得分:0)

Cyber​​herbalist,我不确定你是否使用这个(我假设你或你的应用程序会遇到一些严重的导航问题)有一个 gotcha 使用Non-Linear Navigation Service时。基本上,如果您使用事件处理程序 OnNavigatedTo 保存到文件,或者在某些情况下 OnNavigatedFrom ,则在您之前保存的内容之上进行写作。换句话说,所有服务都在调用GoBack()方法,在这种情况下,您可以触发方法再次保存到文件中。

以下是它的工作原理:

  

首页 - > OptionsPage - > ExamPage - > ScorePage

  现在,当您导航回主页时,这确实发生了什么:

  主页< - OptionsPage< - ExamPage< - ScorePage

如果是这种情况,请在App.xaml.cs文件中创建一个全局变量,用于存储是否已完成考试。然后转到保存内容的任何页面,并使用“if”语句进行检查,以确定您是在进入下一页还是导航回主页。另外,请确保在ScorePage上保存到您设置检查完成的全局变量后的文件。