如何在Windows 8.1中使用SearchBox并通过异步方法加载结果

4

我正在使用一个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个回答

4

如果MSDN提供了更清晰的信息,那就好了。

花费一些时间后,我偶然发现了这篇博客并找到了答案。

需要修改代码如下:

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;
}}

3

您必须使用延迟加载。在添加建议之前,您必须先添加RequestDeferral和Deferral Complete。

在添加之前

var deferral = args.Request.GetDeferral();

在您追加之后
deferral.Complete();

希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接