我有一个用户输入内容的文本框。一旦有3个字符,就会调用一个方法从Web服务获取信息,并且输入不流畅。 我认为问题在于,在没有收到信息之前,输入任何东西都是不可能的。
我的文本框XAML:
<toolkit:PhoneTextBox Background="Black" Width="460" VerticalAlignment="Top" BorderThickness="1" Padding="0" BorderBrush="White" x:Name="searchtextbox" TextWrapping="Wrap" Hint="Buscar" AcceptsReturn="True" FontSize="21.333" FontFamily="Segoe WP SemiLight" Foreground="White" ActionIcon="/Assets/images/appbar/feature.search.png" InputScope="AddressCity" TextChanged="searchtextbox_TextChanged" SelectionForeground="White" CaretBrush="White" LostFocus="searchtextbox_LostFocus" GotFocus="searchtextbox_GotFocus" Height="71" MaxHeight="71" />
我使用textchanged方法捕获信息。
private async void searchtextbox_TextChanged(object sender, TextChangedEventArgs e)
{
this.ListaResultados.ItemsSource = await Protos.getProtoBusqueda(this.searchtextbox.Text);
}
这是调用WS的方法:
public static async Task<ObservableCollection<Resultados> getProtoBusqueda(string txtCajaBusqueda)
{
string txtBusqueda = txtCajaBusqueda;
string url = String.Concat(urlBasic, urlBusqueda, txtBusqueda, format);
App.resultados.Coordenadas = null;
try
{
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(url);
HttpResponseMessage response = await client.GetAsync(String.Format(url));
if (response.IsSuccessStatusCode)
{
Stream data = await response.Content.ReadAsStreamAsync();
UserSearchEntityV2 datos = UserSearchEntityV2.ParseFrom(data);
//HIDDEN CODE TO SET INFORMATION//
ListOfResults.Add(new Resultados() { Nombre = datos.ResultList[i].Name, Municipio = datos.ResultList[i].Mun, Provincia = bbdd.obtenerProvincia(datos.ResultList[i].Prov), Id = datos.ResultList[i].Id, Tipo = datos.ResultList[i].Type, TipoImagen = imagenTipo, Transporte1 = listaTransportes[0], Transporte2 = listaTransportes[1], Transporte3 = listaTransportes[2], Transporte4 = listaTransportes[3], Transporte5 = listaTransportes[4], Transporte6 = listaTransportes[5], Transporte7 = listaTransportes[6], Transporte8 = listaTransportes[7], IsStop = isStop });
}
}
else
{
MessageBox.Show("No se ha podido conectar");
}
}
}
catch (Exception ex)
{
}
return ListOfResults;
}
这两种方法都是异步的,所以,我不明白为什么打字这么慢。 谢谢!
答案 0 :(得分:1)
我认为问题是当你从结果中分配this.ListaResultados.ItemsSource时,它可能是毫秒级的3倍,而且会让UI变得疯狂。
不要分配操作的任何结果以确保它不缺,只需调用方法而不将其分配给ItemsSource。
要正确分配ItemsSource会更好,如果您使用INotifyPropertyChanged创建一个viewmodel并将其绑定到ItemsSource,它将更好地管理它