延迟按键动作的搜索功能

本文关键字:搜索 功能 延迟 | 更新日期: 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
                }
            });
    });
}