Bul*_*lki 2 c# search timer delay
我试图推迟对文本框的操作.我想搜索一个单词的大量文本.现在我使用"textchanged"事件执行此操作.这里的问题是,当他达到超过3个字母的单词时(我已经阻止了0-2个单词搜索),这个过程变得密集.
问题:我的可能性有哪些?
码:
private void txtSearch_TextChanged(object sender, EventArgs e)
{
// delay here
dosearch(searchbox.text);
}
Run Code Online (Sandbox Code Playgroud)
(重新)每按一次键启动一个调度程序计时器,并在计时器结束时进行搜索.大约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
}
Run Code Online (Sandbox Code Playgroud)
更新:为了提高响应能力(上面的示例将在搜索时锁定UI,因为调度程序计时器回调在UI线程上运行),您可以在单独的任务中执行搜索.搜索完成后,您需要确保结果不是陈旧的(用户在搜索时没有修改搜索文本):
private void Search(string searchText)
{
Task.Run(() =>
{
// Execute search
Dispatcher.Invoke(() =>
{
if (searchText == searchBox.Text)
{
// Result is good
}
});
});
}
Run Code Online (Sandbox Code Playgroud)