0

我正在使用 Silverlight 5 并尝试编写一个自动完成文本框(我正在使用带有 radcombobox 的 Telerik radwatermarktextbox 控件来显示项目),其项目列表是从异步调用返回的机场列表到 WCF 服务.

我遇到的问题是,如果我在文本框中快速输入,则会启动多个异步调用以获取过滤后的项目列表(每个按键一个),并且它们不一定以与它们相同的顺序完成运行 - 特别是当返回的列表很大时。

所以如果我要快速输入 HPN,下面的调用就会开始

以 H 作为参数的异步调用(#1 - 将返回 231 行) 以 HP 作为参数的异步调用(#2 - 将返回 4 行) 以 HPN 作为参数的异步调用(#3 - 将返回 1 行)

有时我得到的结果是在其他人之后调用#1

我无法更改正在调用的 wcf 服务或向 WCF 服务添加同步方法。

Foxpro 有一个名为 CHRSAW 的函数,它可以告诉您输入缓冲区中是否有键等待(http://msdn.microsoft.com/en-us/library/5skwdb75(v=vs.80).aspx),它可能是用于防止调用#1 和#2。

是否有等效的 .NET 功能/特性可以让我这样做?

这是我正在使用的代码

private void ICAO_TextChanged(object sender, TextChangedEventArgs e)
    {
        TextBox txt = (TextBox)sender;

        if (txt.Text != String.Empty)
        {
                radBusyIndicator1.IsBusy = true;
                _ServiceClient.FindAirportByPartialICAOAsync(txt.Text.Trim().ToUpper());
        }
    }
4

1 回答 1

1

比您在评论中发布的解决方案更简单的解决方案是将您发送的文本也作为参数作为用户状态发布。因此,在查找“H”时,您会将“H”作为用户状态传递。

当电话回来时,只使用用户状态=自动完成中的文本的那个。

于 2012-04-25T19:07:01.890 回答