0

这是我坚持的一个奇怪的问题。我有一个要移植到 Win 8 的 Windows Phone 应用程序。它基本上是一个按以下方式构造的日历应用程序。

首先是 MainPage.xaml,其中包含所有可用选项的预览。当您单击日历选项时。它导航到另一个称为日历的页面。应用程序的全部数据由一个名为 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 的函数,并在其中呈现数据和图像。

但是如果我从模拟器运行它,会发生保存的数据不显示,但是当您导航回主页并再次返回日历页面时。它呈现。

模拟器如何在调试时显示一种行为,而通过运行已部署的应用程序来显示另一种行为?

4

1 回答 1

1

ApplicationDataContainer 您是否从异步加载数据(使用async/await关键字)?每个花费超过 20 毫秒的操作(这涉及到所有不是简单代码操作的操作)都应该在 WinRT 中异步完成。

加载数据可能需要一段时间,根据数据绑定的设置方式,您通常会在 1-2 秒后看到数据出现在屏幕上,如果您没有实现INotifyPropertyChanged事件(Common 文件夹中的VS 模板有一个BindableBase对象为您执行此操作)。如果正确实施,数据会弹出,请给它一些时间。

当您使用断点进行调试时,数据加载速度足够快,因此可以正确显示。如果您在模拟器中前后导航,数据也有时间加载到内存中。

您还可以考虑在应用程序启动时加载数据并在加载时使用扩展的初始屏幕

编辑: 在 Windows 8 中开始使用异步的一个很好的链接:http ://www.silverlightshow.net/items/Windows-8-Metro-Asynchrony-made-easy.aspx 。在您的情况下,这将是

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"]; 
}

将其与 INotifyPropertyChanged 的​​正确实现相结合(例如,通过从 BindableBase 派生的类并使用SetPropertysetter 中的方法)。

于 2012-08-13T14:35:26.443 回答