У меня есть a TextBox
с a TextChanged
событие обеспечено электричеством. В конце это делает запрос к базе данных SQL, таким образом, я хочу ограничить количество запросов.
Я только хочу сделать запрос, если пользователь не нажал, ключ говорят.. 300 миллисекунд или около этого. Если бы по некоторым причинам предыдущий запрос все еще выполняется, я должен был бы отменить это и затем выпустить новый запрос.
Создайте System.Windows.Forms.Timer
и сбрасывайте его (например, останавливайте, а затем запускайте) после каждого нажатия клавиши. Если событие таймера срабатывает, отключите таймер.
Используйте Reactive Framework для запуска по последовательности событий. Я не уверен в точности , как это будет работать, но вы можете прочитать об этом здесь ( Reactive Extensions for .NET ) и посмотреть, удовлетворит ли это ваши потребности. Здесь тоже есть несколько примеров: Примеры . Пример «Регулирования» может быть тем, что вы ищете.
1) Создайте таймер.
2) Создайте обработчик для события Tick вашего таймера. На каждом тике проверяйте, прошло ли достаточно времени простоя, и если да, ОСТАНОВИТЕ таймер и выполните запрос.
3) Каждый раз, когда в этом текстовом поле происходит нажатие клавиши, ПЕРЕЗАПУСКАЙТЕ таймер.
Добавьте второй слушатель действий, который вызывается всякий раз, когда пользователь нажимает любую клавишу, и когда он вызывается, сохраняет текущее время в глобальной переменной. Затем, когда вызывается ваше событие TextChanged, оно проверяет разницу во времени между глобальной переменной и текущим временем.
Если разница меньше 300 миллисекунд, запустите таймер для выполнения запроса через 300 миллисекунд. Затем, если пользователь нажимает другую клавишу, он сначала сбрасывает таймер.