【问题标题】:Unexpected behavior with Isolated Storage on WP7WP7 上的隔离存储出现意外行为
【发布时间】:2011-04-28 00:27:50
【问题描述】:

我在使用独立存储时遇到了一些意外行为。在这种情况下,我使用它来维护状态以用于墓碑。

这是一款业余无线电执照考试练习应用。这就是发生的事情。当应用程序第一次运行时,用户在 MainPage 上,并选择两个链接之一,OptionPage1 或 OptionPage2(它们的工作方式类似,所以我只关注一个)。在 OptionsPage1 上,用户从多个选项中进行选择,然后单击 Launch 按钮转到 ExamPage,用户在此回答问题。完成考试后,用户前往 ScorePage 查看分数。完成此操作后,其中一个选项是单击按钮返回主页面。

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

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

【问题讨论】:

  • 如果不能看到代码,就很难说会发生什么。您能否发布您的辅助方法并演示它们如何在您应用的不同页面中使用。
  • 这可能是一种竞争条件吗?你是异步保存的吗?

标签: windows-phone-7 isolatedstorage


【解决方案1】:

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

下面是它的工作原理:

主页 --> OptionsPage --> ExamPage --> ScorePage

现在,当您导航回主页时,实际情况如下:

HomePage

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多