延迟按键动作的搜索功能
本文关键字:搜索 功能 延迟 | 更新日期: 2023-09-27 18:19:23
我正在尝试延迟文本框上的操作。我想在大量的文本中搜索一个词。现在我对"textchanged"事件执行此操作。这里的问题是,当他找到一个超过3个字母的单词时(我已经阻止了0-2个单词搜索),这个过程变得非常密集。
问题:这里的可能性是什么?
- ex:在textchanged-event上放一个计时器?如果有,我该怎么做?
private void txtSearch_TextChanged(object sender, EventArgs e)
{
// delay here
dosearch(searchbox.text);
}
(Re)在每次按下键时启动调度程序计时器,并在计时器结束时进行搜索。大约200-300毫秒的延迟通常是很好的。
private DispatcherTimer _searchTimer;
// Initialize timer in constructor with 200 ms delay and register tick event.
private void txtSearch_TextChanged(object sender, EventArgs e)
{
_searchTimer.Stop();
_searchTimer.Start();
}
private void OnSearchTimerTick(object sender, EventArgs e)
{
_searchTimer.Stop()
Search(searchBox.Text);
}
private void Search(string searchTxt)
{
// Do search
}
更新:为了提高响应性(上面的示例将在搜索时锁定UI,因为dispatcher计时器回调在UI线程上运行),您可以在单独的Task中执行搜索。当搜索完成时,您需要确保结果不是陈旧的(即用户在搜索时没有修改搜索文本):
private void Search(string searchText)
{
Task.Run(() =>
{
// Execute search
Dispatcher.Invoke(() =>
{
if (searchText == searchBox.Text)
{
// Result is good
}
});
});
}