Тема: Почекати поки користувач завершить ввід

В Xamarin є такий елемент як Search, по суті звичайний текст бокс. Потрібно зробити так щоб метод пошуку спрацьовував зі затримкою в 1 сек. Це потрібно зробити тому що метод буде звертатися до сервера, щоб зменшити навантаження на сервер, має бути невеличка затримка

Наприклад
Користувач вводить "Собака" - середня швидкість вводу 0,6 сек на символ
Кожного разу таймер який обробляє затримку має збиватися, і в результаті на сервер відправиться "Собака"

Користувач вводить "Сам", зробив затримку на 1 сек, а потім "ка"
Тут вже відправиться на сервер спочатку "Сам" а потім "Самка"

Думаю зрозумілий приклад і завдання. (Якщо ні, що не зрозуміло ?)

Як таке реалізувати ?

В C# + Xamarin є async / await якого не можна відмінити і Device.StartTimer якого теж не можна відмінити.

Можливо підкажете якість інші ідеї. Тут таймер не принципово, якщо затримку можна реалізувати іншими методами.

2 Востаннє редагувалося FakiNyan (24.06.2020 09:34:04)

Re: Почекати поки користувач завершить ввід

а ви можете просто зберігати поточний час в змінну у вигляді якогось числового значення?
Ця змінна має бути глобальною для класу, в котрому ви викликаєте метод, що запускає таймер.
Коли користувач щось кляцає - ви зберігаєте поточний час в змінну, та запускаєте таймер, а в колбеці таймера ви перевіряєте різницю між збереженим в змінну часом та поточним часом, і якщо різниця більша, або дорівнює паузі, то робіть запит до серверу, а якщо менша - то нічого не робіть.

Подякували: Betterthanyou, koala2

3

Re: Почекати поки користувач завершить ввід

Betterthanyou написав:

щоб метод пошуку спрацьовував зі затримкою в 1 сек.
...
метод буде звертатися до сервера, щоб зменшити навантаження на сервер, має бути невеличка затримка

Сама ідея, відправляти дані поки користувач не завершив ввід, дуже погана. Ви не можете знати, з якою швидкістю користувач буде вводити символи. Дайте користувачу можливість самому вирішувати, коли відправляти дані, це буде максимально ефективно (мінімальне навантаження на сервер і повний контроль над процесом введення).

4

Re: Почекати поки користувач завершить ввід

Пане leofun01, ви б іноді зазирали в інтернет з JS. Усі давно користуються підказками при наборі в Google.

Подякували: FakiNyan, Q-bart2

5

Re: Почекати поки користувач завершить ввід

оф.

Знизав плечами і продовжив користувати DuckDuckGo без JS.

Подякували: putinovich1

6

Re: Почекати поки користувач завершить ввід

У КачкаКачкаПішов теж є.

Подякували: leofun011

7

Re: Почекати поки користувач завершить ввід

koala написав:

У КачкаКачкаПішов теж є.

перепрошую, але не пішов, а йди, або йти, бо пішов - це буде went

Подякували: dot1

8 Востаннє редагувалося koala (24.06.2020 15:12:05)

Re: Почекати поки користувач завершить ввід

У розмовній українській минулий час також використовується як наказовий спосіб.
"Чого стоїш? Пішов!"
"Став! Відповідай!"

9

Re: Почекати поки користувач завершить ввід

koala написав:

У розмовній українській минулий час також використовується як наказовий спосіб.
"Чого стоїш? Пішов!"
"Став! Відповідай!"

так і знав, що ви це скажете.

10

Re: Почекати поки користувач завершить ввід

Як вже було вище написано, треба просто додати таймер і оновлювати його значення після кожної зміни в текстовому полі.
Після кожної зміни створюємо Task який буде скасований якщо відбулась ще якась зміна в текстовому полі, або виконаний якщо змін немає. Цей таск повинен повернути дані з сервера.

11 Востаннє редагувалося dot (28.08.2020 21:34:25)

Re: Почекати поки користувач завершить ввід

koala написав:

У розмовній українській минулий час також використовується як наказовий спосіб.
"Чого стоїш? Пішов!"
"Став! Відповідай!"

«Rozmovna» to jak «surgyk»?

12

Re: Почекати поки користувач завершить ввід

dot написав:

«Rozmovna» to jak «surgyk»?

Ні, то https://uk.wikipedia.org/wiki/%D0%A0%D0 … 0%BD%D1%8F