Как ускорить 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();
}