0

我正在实施在我的Metro应用程序内搜索。搜索效果很好,但结果和UI如预期出现,但有一个问题。Metro App OnSearchActivated ProgressRing不显示

我试图在搜索之前显示ProgressRing并在搜索完成后将其隐藏,但它永远不会显示。

我缺少什么,下面的代码片段:

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正常工作。如果是这样,那么最简单的方法是让等待,如果没有请告知我在这里失踪。

回答

0

如果是这样,那么最简单的方法是什么让这种方法等待,如果没有请告知我在这里失踪。

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

+0

此方法包含很多UI交互,并且没有异步调用。我可以将它包装在等待Task.Run中,但在那里,我将不得不将所有UI的东西包装在调度程序.RunAsync调用中。似乎对我来说过分了。有什么建议么? – c0D3l0g1c

+0

在该方法中添加了一个await Task.Delay(10)。干净,简单,但不确定是否合适。 – c0D3l0g1c

+0

我不会使用'Task.Delay'。我认为在该方法中有一些内容需要*时间*,这就是为什么您要显示进度指示器的原因。你应该寻找什么是占用时间;常见的罪魁祸首是磁盘或网络I/O。 –