我正在使用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;
}}
答案 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();
希望它有所帮助。