这是一个我坚持的奇怪问题。我有一个Windows Phone应用程序,我正在移植到Win 8.它基本上是一个按以下方式构建的日历应用程序。
首先是MainPage.xaml,它预览了所有可用选项。单击“日历”选项时。它导航到另一个名为Calendar的页面。应用程序的整个数据由一个名为CycleManager的类管理,这是一个密封类。数据存储在ApplicationDataContainer
中,相当于IsolatedStorage
。
第一次创建实例时,它会从ApplicationDataContainer
public sealed class CycleManager
{
private static readonly CycleManager instance = new CycleManager();
public CycleManager()
{
localfolder = Windows.Storage.ApplicationData.Current.LocalFolder;
ReadFromIsolatedStorage();
}
public static CycleManager Instance
{
get
{
return instance;
}
}
}
导航回主页时会保存数据。
所以现在,我的问题是这个,当我调试。它工作正常。保存的数据显示在日历上。 在Calendar类的构造函数中,我调用一个名为CreateCalendar的函数,并在其中呈现数据和图像。
但是,如果我从模拟器运行它,会发生什么是保存的数据不会显示,但是当您导航回主页并再次返回日历页面时。它渲染。
模拟器如何在调试时显示一种行为,另一种是通过jus运行已部署的应用程序?
答案 0 :(得分:1)
您是否正在加载来自ApplicationDataContainer
异步的数据(使用 async / await 关键字)?每个操作超过20毫秒(这不是一些简单的代码操作)都应该在WinRT中异步完成。
加载数据可能需要一段时间,根据数据绑定的设置方式,您通常会在1-2秒后看到数据出现在您的屏幕上,如果您没有实现{{1事件(VS模板中的Common文件夹有一个INotifyPropertyChanged
对象为您执行此操作)。如果这是正确实现的,数据会弹出,只需给它一些时间。
当您使用断点进行调试时,数据加载得足够快,以便正确显示。如果您在模拟器中前后导航,数据也有时间加载到内存中。
您也可以考虑在应用程序启动时加载数据,并在加载时使用extended splash screen。
编辑: 在Windows 8中开始使用异步的一个很好的链接:http://www.silverlightshow.net/items/Windows-8-Metro-Asynchrony-made-easy.aspx。在你的场景中,这将是
BindableBase
将它与正确的INotifyPropertyChanged实现相结合(例如通过从BindableBase派生的类并在setter中使用public CycleManager()
{
localfolder = Windows.Storage.ApplicationData.Current.LocalFolder;
Task.Run(() => ReadFromIsolatedStorage());
}
public async Task ReadFromIsolatedStorage() {
ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;
ApplicationDataCompositeValue composite =
(ApplicationDataCompositeValue)localSettings.Values["Setting"];
}
方法)。