执行查询时自动填充文本框冻结.一定是更好的方式!

Chr*_*yva 5 c# linq wpf xaml

大家!我尽我所能搜索,并没有找到我正在寻找的帮助.

问题

执行查询时,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或查杀服务器的情况下进行查询?

感谢你们!

Ric*_*001 4

这行:

var result = SearchUnderlyings(e.SearchText);
Run Code Online (Sandbox Code Playgroud)

同步运行,锁定 UI 线程。解决这个问题的方法是切换到异步模式,在该模式中启动查询,然后在查询完成时执行某些操作。

本文很好地演示了它,并展示了一些解决方案 - http://www.codeproject.com/KB/cs/AsyncMethodInitation.aspx