大家!我尽我所能搜索,并没有找到我正在寻找的帮助.
执行查询时,AutoCompleteTextbox FREEZES和"吃"字符
模仿Google即搜即得功能
首先要做的事:C#,WPF,.NET 4.0
好的,现在已经不在了,我正在尝试找到实现动态自动完成文本框的最佳方法,该文本框在每个字母输入后查询数据库以查找结果.
触发AutoCompleteTextBox的TextChanged事件时,将执行以下代码:
public void Execute(object sender, object parameter)
{
//removed some unnecessary code for the sake of being concise
var autoCompleteBox = sender as AutoCompleteTextBox;
var e = parameter as SearchTextEventArgs;
var result = SearchUnderlyings(e.SearchText);
autoCompleteBox.ItemsSource = result;
}
Run Code Online (Sandbox Code Playgroud)
现在,假设SearchUnderlyings(e.SearchText)平均需要600-1100毫秒 - 在此期间,文本框被冻结并且"吃掉"按下的任何键.这是我一直遇到的烦人问题.出于某种原因,LINQ in SearchUnderlyings(e.SearchText)在GUI线程中运行.我尝试将此委托给后台线程,但仍然是相同的结果.
理想情况下,我希望文本框能够像Google Instant一样工作 - 但我不想在服务器/查询返回结果之前"杀死"线程.
任何人都有经验或可以提供一些指导,这将允许我在不冻结GUI或查杀服务器的情况下进行查询?
感谢你们!
这行:
var result = SearchUnderlyings(e.SearchText);
Run Code Online (Sandbox Code Playgroud)
同步运行,锁定 UI 线程。解决这个问题的方法是切换到异步模式,在该模式中启动查询,然后在查询完成时执行某些操作。
本文很好地演示了它,并展示了一些解决方案 - http://www.codeproject.com/KB/cs/AsyncMethodInitation.aspx