Я использую ввод из TextBox для фильтрации информации, отображаемой в ListBox. Я хочу, чтобы фильтрация происходила при каждом нажатии клавиши.
Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь вводит второй, третий и т. Д. Символ, фильтр будет выполняться для каждого из нажатий клавиш. Например. Пользователь вводит «a», и фильтрация начинается, прежде чем фильтрация по букве «a» завершается, пользователь добавляет букву «b», поэтому полная строка поиска теперь равна «ab».
На этом этапе я хочу, чтобы первый фильтр полностью остановился и запустил новый фильтр с нуля.
private bool Interrupt = false;
private bool Searching = true;
private void tbxFilter_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (Searching)
{
Interrupt = true;
}
}
private void tbxFilter_KeyUp(object sender, KeyEventArgs e)
{
Searching = true;
foreach (MyObject o in ListOfMyObjects)
{
if (Interrupt)
{
Interrupt = false;
break;
}
else
{
DoFilter(o);
}
}
Searching = false;
}
Приведенный выше код показывает примерно то, что у меня есть на данный момент, с удалением некоторых частей приложения (например, типов и имен объектов).
В идеале я хотел бы сделать паузу в начале второго нажатия клавиши (пока поиск не будет установлен в значение false - что означает, что все другие поиски завершены), но добавит цикл while для проверки этого просто заблокирует программу в этой точке.
Есть ли способ достичь этого?
Спасибо
РЕДАКТИРОВАТЬ: Элемент управления, который отображает элементы является элементом управления ListBox / ListView.