在Windows Phone 8.1中进行页面导航时出现奇怪的行为

4

我是一位WP 8.1应用程序开发者。

我正在制作一个“阅读器”页面。它的构造函数如下:

    public Reader()
    {
        this.InitializeComponent();
        this.NavigationCacheMode = NavigationCacheMode.Enabled;
        initalizeTimers();
        initAd();
    }

并且onNavigatedTo

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        HardwareButtons.BackPressed += Hardware_backPressedLocal;
        var x = (Tuple<int, string, Global.FileType>)e.Parameter;

        //load settings here
        loadColorSchemes();
        setStatusBarColor();

        if (e.NavigationMode == NavigationMode.Back)
        {
            readerVm.refreshWebView();
            return;
        }

        if (x != null)
        {
            initalizeReader(x);
        }
    }
initalizeReader() 是一个异步方法。页面前面有一个网格用于显示等待消息,而 initializeReader 方法会隐藏该网格。 问题: 点击按钮调用 Frame.Navigate() 方法到阅读器页面时,有时会出现等待网格并在一段时间后(预期)隐藏,而其他情况下 UI 会冻结,然后阅读器页面加载时等待网格已经隐藏。而且 70-80% 的时间 UI 会冻结。
请问这里出了什么问题?如何解决?

initializeReader() 方法的代码是什么? - Eldar Dordzhiev
1
@EldarDordzhiev 最耗费资源的方法是FileIO.ReadTextAsync(),其他方法则是从LocalSettings中加载值。 - ac-lap
1
@aclab不要紧,把你的代码粘贴在这里。那会有所帮助。 - Eldar Dordzhiev
2
冻结很可能是由于死锁引起的。了解发生了什么的好方法是在应用程序冻结时按下调试器的“暂停”按钮,然后检查调用堆栈以查看线程正在等待什么。 - Kevin Gosse
1个回答

0
尝试在页面引发事件Loaded时调用你的方法initalizeReader(x);。此外,如果该方法调用了一些异步函数,请也以异步方式调用它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接