Задержка textChanged Event Xamarin формы - PullRequest
0 голосов
/ 27 марта 2020

Я изучаю Xamarin, я хотел бы подождать, пока пользователь не закончит sh, чтобы нажать на панель поиска и что-то сделать. Я хочу использовать TextChange, чтобы сделать его динамичным c

Вот мой код поиска Xaml:

 <!--THe search bar-->
<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand"  VerticalOptions="FillAndExpand" >
<SearchBar  x:Name="VariableSearchWords"    TextChanged="SearcNews">  </SearchBar>
 </StackLayout>
<!--END THe search bar-->

Вот функция:

   public async void GetNewsData(string title, string Mylanguage)
    {

        newsObj= new List<NewsModel>();
            var client = new NewsSearchClient(new ApiKeyServiceClientCredentials(key));
            var newsResults = client.News.SearchAsync(query: searchTerm, market: Mylanguage, count: 14, originalImage: true).Result;
            if (newsResults.Value.Count > 0)
            {


                for (int i = 0; i < newsResults.Value.Count; i++)
                {
                         var news = new NewsModel();

                        news.NewsUrl = newsResults.Value[i].Url;
                        news.NewsImageUrl = await DownloadImagesAsync(newsResults.Value[i].Image.ContentUrl); 
                        newsObj.Add(news);

                    }



                }

                NewsList.ItemsSource = newsObj;
                // return newsObj;
            }

    }

// поиск слов

  private async void SearcNews(object sender, TextChangedEventArgs e)
    {

        // StaRT what you want to do after 200 millisecond delay  

        NewsList.ItemsSource = null;

        if (task == null)// very 
        {
            task = Task.Run(async () =>
            {
                await Task.Delay(timeDelay);


               //get data 
               GetNewsData("  ", myuser.NewsLanguage); //getData


                // END what you want to do after 200 millisecond delay
                task = null;
            });
        }                    
    }

Спасибо за помощь

1 Ответ

0 голосов
/ 27 марта 2020

Вы можете использовать Task для достижения этого эффекта, проверьте ниже:

 <SearchBar x:Name="VariableSearchWords" Placeholder="hi" TextChanged="SearcNews"></SearchBar >

 Task task;
 int timeDelay = 1000;
 private async void SearcNews(object sender, TextChangedEventArgs e)
    {
        if (task == null || task.IsCompleted)
        {
            task = Task.Run(async () => 
            {
                await Task.Delay(timeDelay);
                FunctionThatDoesSomethingAfter(VariableSearchWords.Text);// what you want to do after 200 millisecond delay                    
            });
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...