Наиболее используемый способ сделать это - ввести таймер, в котором каждый раз, когда пользователь вводит новый символ, который сбрасывается вашим временным интервалом, но если он длиннее, чем x секунд, тогда выполняйте код.
Не забудьте сделать это асинхронным, чтобы, если пользователь начинает вводить снова, когда вы выполняете поиск, вы можете отменить асинхронный вызов, поскольку эта информация теперь будет устаревшей.
Если вы используете модель представления, просто измените textbox1_TextChanged на соответствующий установщик свойств
private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
if (!tmr.Enabled)
{
tmr.Enabled = true;
tmr.Start();
}
TimeSinceType = DateTime.Now;
}
public DateTime TimeSinceType { get; set; }
protected void Load()
{
tmr = new Timer();
tmr.Interval = 200;
tmr.Elapsed += new ElapsedEventHandler(tmr_Elapsed);
}
void tmr_Elapsed(object sender, ElapsedEventArgs e)
{
if ((DateTime.Now - TimeSinceType).Seconds > .5)
{
Dispatcher.BeginInvoke((Action)delegate()
{
//LoadData();
tmr.Stop();
});
}
}