Как ускорить C# Форма полнотекстового поиска из TextBox

Мне нужно добиться аналогичного TextChanged функциональность TextBox поле в приложении C# Windows Forms. В моем случае TextChanged Событие собирает данные на основе TextBox.Text и отображает их в дереве. Поскольку сбор и отображение слишком большого количества данных в моем случае занимает много времени, я испытываю медленные ответы, вызванные нежелательными перерисовками в графическом интерфейсе. Это конечно по замыслу TextChanged событие, поскольку оно буферизует последующие нажатия клавиш и запуска TextChanged за каждую букву. Мне нужно добиться чтобы все буферизовалось TextChanged события пропускаются, в результате выполняется только последнее. На самом деле, когда я печатаю, мне нужно изменить это

l, lo, lon, long, longn, longna, longnam, longname

к этому:

l, longname

3 ответа

Решение

Использовать System.Windows.Forms.Timer периодически проверять наличие изменений в вашем TextBox.

Если вы хотите только замедлить его, выполните обработку в обработчике тика по таймеру, но начните с отключенного таймера. При изменении текста отключите таймер, а затем включите его. Убедитесь, что таймер однократный (не повторяющийся). Это означает, что обработка будет происходить не раньше, чем через интервал таймера после изменения текста, и что новые изменения текста отменят все предыдущие изменения, которые были установлены. Это то, что вы хотите. По мере того, как пользователь печатает, обработка будет откладываться снова и снова до тех пор, пока пользователь не приостановит набор текста.

Удивлен, это было так просто...

private void comboBox1_TextChanged(object sender, EventArgs e)
{
    timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
    doSearch();
    timer1.Stop();
}
Другие вопросы по тегам