【问题标题】:Metro App OnSearchActivated ProgressRing not displayingMetro App OnSearchActivated ProgressRing 未显示
【发布时间】:2013-05-31 05:32:08
【问题描述】:

我正在我的 Metro 应用程序中实现搜索。搜索运行良好,但结果和 UI 出现了一个问题。

我尝试在搜索前显示ProgressRing,并在搜索完成后将其隐藏,但从未显示。

我错过了什么,下面的代码 sn-p:

    protected override void OnSearchActivated(Windows.ApplicationModel.Activation.SearchActivatedEventArgs args)
    {
        // Some Metro designer generated code here

        // Show progress ring
        MainPage.Current.ResetProgressRingState(true);

        // Bind search results
        MainPage.Current.BindSearchResults(args.QueryText);

        // Ensure the current window is active
        Window.Current.Activate();

        // Hide progress ring
        MainPage.Current.ResetProgressRingState(false);
    }

我怀疑需要等待BindSearchResults 方法才能使ProgressRing 正常工作。如果是这样,使该方法等待的最简单方法是什么,如果不是,请告知我在这里缺少什么。

【问题讨论】:

    标签: windows-runtime microsoft-metro winrt-xaml c#-5.0 winrt-async


    【解决方案1】:

    如果是这样,使该方法可等待的最简单方法是什么,如果不是,请告知我在这里缺少什么。

    将其标记为async 并让它返回Task。在该方法中,对其他异步操作使用await

    【讨论】:

    • 这个方法包含很多UI交互,里面没有异步调用。我可以将它包装在 await Task.Run 中,但在那里我必须将所有 UI 内容包装在 dispatcher.RunAsync 调用中。对我来说似乎有点矫枉过正。有什么建议吗?
    • 在该方法中添加了 await Task.Delay(10)。干净,简单,但不确定是否合适。
    • 我不会使用Task.Delay。我假设该方法中有一些东西需要时间,这就是您想要显示进度指示器的原因。您应该查找占用时间的内容;常见的罪魁祸首是磁盘或网络 I/O。
    • 鉴于它是一个 Metro 应用程序,我希望 I/O 是异步的。我怀疑“大量的 UI 交互”是罪魁祸首。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2019-09-04
    • 1970-01-01
    • 2022-07-30
    • 2018-02-22
    • 1970-01-01
    相关资源
    最近更新 更多