我正在尝试延迟对文本框的操作。我想在大量文本中搜索一个词。现在我用“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/