在调用Web服务时,键入Windows手机文本框会停止

时间:2015-04-09 08:57:08

标签: c# web-services xaml windows-phone-8 textbox

我有一个用户输入内容的文本框。一旦有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;

        }

这两种方法都是异步的,所以,我不明白为什么打字这么慢。 谢谢!

1 个答案:

答案 0 :(得分:1)

我认为问题是当你从结果中分配this.ListaResultados.ItemsSource时,它可能是毫秒级的3倍,而且会让UI变得疯狂。

不要分配操作的任何结果以确保它不缺,只需调用方法而不将其分配给ItemsSource。

要正确分配ItemsSource会更好,如果您使用INotifyPropertyChanged创建一个viewmodel并将其绑定到ItemsSource,它将更好地管理它