【问题标题】:Windows Phone 8.1 how to display Progress Ring when Navigating to another Page?Windows Phone 8.1 导航到另一个页面时如何显示进度环?
【发布时间】:2015-05-12 10:40:25
【问题描述】:

WinPhone8.1 的全新体验:

我的 WinPhone8.1 应用程序似乎在页面之间导航很慢 - 每个页面都是一个问题,我有上一个/下一个按钮:

private void btnNextQuestion_Click(object sender, RoutedEventArgs e)
    {
        ProgressRing1.IsActive = true;
        Frame.Navigate(typeof(Question), _survey.Id.ToString() + "|" + _nextField.Id.ToString());
    }

如您所见,我只是尝试设置ProgressRing1.IsActive = true;,我没想到它会起作用,但我还是尝试了。然后我尝试变得聪明并使用一个任务(这对我来说也是新的 - 所以也许我做错了)来启动 ProgressRing 但这也没有任何效果:

private async void btnNextQuestion_Click(object sender, RoutedEventArgs e)
    {
        await Task.Run(() => StartProgrssRing());
        Frame.Navigate(typeof(Question), _survey.Id.ToString() + "|" + _nextField.Id.ToString());
    }

    private void StartProgrssRing()
    {
        ProgressRing1.IsActive = true;
    }

那么谁能解释我如何实现我的目标 - 基本上是让用户知道他们的按钮按下已被识别并且应用正在处理它。

【问题讨论】:

    标签: c# windows-phone-8.1


    【解决方案1】:

    您需要让 UI 线程运行一点来刷新 UI。有很多方法可以达到这个结果,我在这里建议的方法是致电Task.Delay

    private async void btnNextQuestion_Click(object sender, RoutedEventArgs e)
    {
        ProgressRing1.IsActive = true;
    
        // Wait 2 ms to let the UI thread execute
        await Task.Delay(2);
    
        Frame.Navigate(typeof(Question), _survey.Id.ToString() + "|" + _nextField.Id.ToString());
    }
    

    为什么是 2 毫秒?因为您需要给 UI 线程至少 1.6 毫秒(每帧之间的持续时间),所以请确保 UI 已刷新。否则,它可能会在不刷新 UI 的情况下执行您对 Frame.Navigate 的调用。

    【讨论】:

    • 完美!完全按要求工作。感谢您的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多