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

标签 c# search timer delay

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

问题: 我在这里的可能性是什么?

  • 例如:在 textchanged 事件上放置一个计时器?如果是这样,我该怎么做?

代码:

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

最佳答案

每次按下一个键时(重新)启动调度程序计时器,并在计时器结束时进行搜索。大约 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
                }
            });
    });
}

关于c# - 延迟按键操作中的搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25485972/

相关文章:

c# - NoSuchWindowException - 尽管遵循其他答案中的配置建议,但无法在 IE 上的 Selenium 中的关闭窗口中找到元素

c# - 将 Collection<T> 转换为接口(interface) - 为什么它不起作用?

c#引用变量内存分配

php - 如何在数组中查找找到的 id 的索引

swift - 使用计时器定期更新 NSTableCellView 内的文本字段

c# - 调用堆栈不说 "where you came from",而是 "where you are going next"?

搜索数字字段

ms-access - 在 Microsoft Access "application"中搜索字段引用

JavaScript 计数计时器

c# - 如何在不使用 sleep 的情况下在 C# 中执行短暂的延迟?