2016-03-23 6 views
0

Мне нужно заблокировать выполнение моего кода, пока пользователь ничего не вводит в TextBox.Подождите, пока не произойдет «последнее» событие

Однако в этом конкретном случае мне действительно нужно подождать «пока пользователь не закончит печатать». I.e., я не хочу просто ждать, когда в первый раз произойдет событие TextChanged, я хочу подождать до тех пор, пока не будет проведено не менее 500 мс с момента его последнего запуска, прежде чем продолжить выполнение моего метода.

В настоящее время у меня есть что-то, что использует таймеры, где каждый раз, когда происходит событие TextChanged, таймер перезапускается, а при возникновении события Tick таймера это означает, что пользователь «закончил набирать».

Есть три основные проблемы, связанные с этим подходом прямо сейчас, хотя:

  • Там должно быть лучше/уборщик способом, чем не используя Timer для этого
  • До сих пор мне не нужно, чтобы блокировать выполнение пока пользователь «не закончил набирать», так что в основном просто добавлял мой код в обработчик событий Tick, но это не изменилось.
  • Мне также нужно установить тайм-аут, чтобы, если пользователь не закончил набирать определенное количество времени, он должен просто вернуться к методу, так как ему не удалось дождаться пользователя.

Как это сделать?

+0

Это может быть наилучшим способом ... сброс таймера и запуск вашего кода после того, как х количество времени, которое вы решили, указывает на то, что пользователь набрал текст. Или вы можете поместить код в событие «Оставить» для элемента управления и сделать им вкладку из него, чтобы запустить свой код, но это может быть не тот пользовательский опыт, который вам нужен. –

ответ

2

Это очень легко сделать, используя ReactiveUI. Посмотрите пример на главной странице. Это делает более или менее точно то, что вам нужно.

Основано на Reactive Extensions (RX) для .Net и написано так, чтобы все было так просто. Если использование ReactiveUI не является вариантом, я предлагаю вам взглянуть на RX и как ReactiveUI реализует это.

+0

Можете ли вы привести пример того, как это будет работать в моем случае? Также для потомков пример на их странице может измениться. – cogumel0

+0

Хорошая точка. У меня только мобильный телефон, поэтому мои возможности редактирования ограничены. Последний блок кода в примере прослушивает измененное значение и ждет одну секунду перед запуском команды. Это должно быть легко изменить значение в вашей модели просмотра из события TextChanged, чтобы сделать что-то подобное. –

+0

Также приветствовал бы некоторые ответы, которые не полагаются на ReactiveUI. Это то, что я еще не совсем понял, но не уверен, что это вариант. – cogumel0

Смежные вопросы