如何使用异步方法加载结果,在Windows 8.1中使用搜索框

时间:2014-06-25 16:13:27

标签: c# windows-runtime windows-8.1 win-universal-app

我正在使用SearchBox列出从服务器获取的一些项目。 对服务器的调用是在异步方法中进行的。

我得到一个例外 发生了'System.InvalidOperationException'类型的异常 WinRT信息:在意外时间调用了一个方法。

我的XAML

<SearchBox Name="SearchBox"
    Style="{StaticResource AccountSearchBoxStyle}"
    Grid.Row="1"
    Margin="120,0,0,0"
    HorizontalAlignment="Left"
    SuggestionsRequested="SearchBox_SuggestionsRequested"
    SearchHistoryEnabled="False" > </SearchBox>

我的代码

private async void SearchBox_SuggestionsRequested(SearchBox sender,
SearchBoxSuggestionsRequestedEventArgs args){
if (string.IsNullOrEmpty(args.QueryText))
{
    return;
}
var collection = args.Request.SearchSuggestionCollection;
if(oldquery != args.QueryText)
{
    var listOfBanks = await addFIPageViewModel.GetBanksOnQuery();
    foreach (Institution insti in listOfBanks)
    {
        collection.AppendQuerySuggestion(insti.name);
    }
    oldquery = args.QueryText;
}}

2 个答案:

答案 0 :(得分:4)

MSDN本可以提供关于此的更清晰的信息。

花了一些时间后我偶然发现了this blog并找到了答案

后面的代码需要修改如下。

private async void SearchBox_SuggestionsRequested(SearchBox sender,
SearchBoxSuggestionsRequestedEventArgs args){
if (string.IsNullOrEmpty(args.QueryText))
{
    return;
}
var collection = args.Request.SearchSuggestionCollection;
if(oldquery != args.QueryText)
{
    //ADD THIS LINE
    var deferral = args.Request.GetDeferral();

    var listOfBanks = await addFIPageViewModel.GetBanksOnQuery();
    foreach (Institution insti in listOfBanks)
    {
        collection.AppendQuerySuggestion(insti.name);
    }

    //ADD THIS LINE
    deferral.Complete();

    oldquery = args.QueryText;
}}

答案 1 :(得分:3)

您必须使用延期。您必须分别添加RequestDeferral和Deferral Complete以及您的追加建议。

在你追加

之前
var deferral = args.Request.GetDeferral();

追加

deferral.Complete();

希望它有所帮助。