У меня есть следующий код в OnTextChanged события в проекте Xamarin.Forms:Trigger действие после задержки
async void OnTextChanged(object sender, TextChangedEventArgs e)
{
if (this.txtClientFilter.Text.Length > 4)
{
var client_list= App.ClientManager.GetTasksAsync(txtClientFilter.Text);
var template = new DataTemplate(typeof(TextCell));
template.SetBinding(TextCell.DetailProperty, "nom_ct");
template.SetBinding(TextCell.TextProperty, "cod_ct");
listview.ItemTemplate = template;
listview.ItemsSource = await client_list;
}
}
Как вы можете видеть, почти каждый пытается нажатие сделать запрос (с помощью метода GetTaskAsync) , Я не хочу запускать каждое нажатие клавиши, я хотел бы игнорировать некоторые нажатия клавиш в течение 1000 миллисекунд.
Как я могу это сделать? Я нашел несколько примеров, используя Task.Delay(), но не работал должным образом.
Используйте Task.Delay with CancellationToken и отмените старый вызов каждый раз, прежде чем создавать новый. Таким образом будет выполнено только последнее нажатие после 1000 мс. –
Очень сложно понять, что вы пробовали и «не работали должным образом», но, возможно, вам стоит взглянуть на операторов сравнения на TimeSpan, чтобы узнать, сколько времени прошло с последнего звонка ... –
Как только разработчики начинают говоря о требованиях * на основе времени *, подобных этому, я рекомендую посмотреть на Reactive Extensions (Rx). Он имеет крутую кривую обучения, но идеально подходит для этих проблем. –