我的应用程序有两个页面,我们称之为TheMenu和TheForm。当用户离开TheForm并返回TheMenu时,TheForm.OnNavigatedFrom()
会将状态保存到独立存储,TheMenu.OnNavigatedTo()
将从隔离存储中读取某些状态以重新初始化TheMenu。
问题在于,由于存储访问是异步的,TheMenu.NavigatedTo()
将在TheForm.OnNavigatedFrom()
完成编写之前开始读取状态。
我正在考虑通过创建AsyncLock
的应用程序范围实例来处理此问题(此处提供的实现:http://www.hanselman.com/blog/ComparingTwoTechniquesInNETAsynchronousCoordinationPrimitives.aspx)。我会获取OnNavigatedTo()
顶部的锁,然后从finally {}
底部的OnNavigatedFrom()
块中释放它。
有没有人预见到这种方法有任何问题?还有更好的选择吗?
答案 0 :(得分:1)
虽然最好以适当的间隔将状态写入磁盘,但对于类似的情况,您应该使用内存中的表示而不是通过磁盘进行往返。有许多方法可以设计它,但一种常见的方法是在App
类中保留共享状态的静态属性。您可以在离开页面时将其保存到磁盘(如您所知)但导航到页面时,首先检查App
属性中是否存在有效对象,然后再尝试从磁盘读取