Если вам удобно использовать инфраструктуру Reactive (Rx), то вы можете реализовать эту функцию, используя ее встроенное регулирование очень быстро.
Вот статья на эту тему: Rx может улучшить отзывчивость интерфейса
И некоторый код, украденный и измененный из статьи:
var textObserver = (from text in Observable.FromEvent<TextChangedEventArgs>(_app.myTextField, "TextChanged")
select text).Throttle(TimeSpan.FromSeconds(.5));
_searchObserver = textObserver.Subscribe(textChangedEvent =>
{
var tb = (TextBox)textChangedEvent.Sender;
DoMySearch(tb.Text);
});
Как указано в статье (которую стоит прочитать полностью), она будет запускать код в лямбда-выражении всякий раз, когда проходит полсекунды, а пользователь ничего не печатает.
Я приведу пример в порядок завтра, когда буду перед своим ПК для разработки, но это должно дать вам отправную точку.