同步OnNavigatedTo和OnNavigatedFrom之间的状态访问

时间:2015-01-14 04:03:02

标签: c# windows-phone-8 asynchronous windows-runtime win-universal-app

我的应用程序有两个页面,我们称之为TheMenu和TheForm。当用户离开Th​​eForm并返回TheMenu时,TheForm.OnNavigatedFrom()会将状态保存到独立存储,TheMenu.OnNavigatedTo()将从隔离存储中读取某些状态以重新初始化TheMenu。

问题在于,由于存储访问是异步的,TheMenu.NavigatedTo()将在TheForm.OnNavigatedFrom()完成编写之前开始读取状态。

我正在考虑通过创建AsyncLock的应用程序范围实例来处理此问题(此处提供的实现:http://www.hanselman.com/blog/ComparingTwoTechniquesInNETAsynchronousCoordinationPrimitives.aspx)。我会获取OnNavigatedTo()顶部的锁,然后从finally {}底部的OnNavigatedFrom()块中释放它。

有没有人预见到这种方法有任何问题?还有更好的选择吗?

1 个答案:

答案 0 :(得分:1)

虽然最好以适当的间隔将状态写入磁盘,但对于类似的情况,您应该使用内存中的表示而不是通过磁盘进行往返。有许多方法可以设计它,但一种常见的方法是在App类中保留共享状态的静态属性。您可以在离开页面时将其保存到磁盘(如您所知)但导航到页面时,首先检查App属性中是否存在有效对象,然后再尝试从磁盘读取