延迟按键操作中的搜索功能

时间:2014-08-25 12:28:55

标签: c# search timer delay

我试图延迟对文本框的操作。我想搜索一个单词的大量文本。现在我使用" textchanged"事件。这里的问题是,当他达到一个超过3个字母的单词时(我已经阻止了0-2个单词搜索),这个过程变得密集。

问题: 这有什么可能性?

  • ex:在textchanged-event上设置一个计时器?如果是这样,我该怎么做?

代码:

private void txtSearch_TextChanged(object sender, EventArgs e)
{
 // delay here
 dosearch(searchbox.text);
}

1 个答案:

答案 0 :(得分:8)

(重新)每按一次键启动一个调度程序计时器,并在计时器结束时进行搜索。大约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,因为调度程序计时器回调在UI线程上运行),您可以在单独的任务中执行搜索。搜索完成后,您需要确保结果不是陈旧的(用户在搜索时没有修改搜索文本):

private void Search(string searchText)
{
    Task.Run(() =>
        {
            // Execute search

            Dispatcher.Invoke(() =>
            {
                if (searchText == searchBox.Text)
                {
                    // Result is good
                }
            });
    });
}