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。 –