我正在使用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函数/ ality允许我这样做?
这是我正在使用的代码
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());
}
}
答案 0 :(得分:1)
比您在评论中发布的解决方案更简单的解决方案是将您要发送的文本作为参数发布为用户状态。因此,当查找“H”时,您将传递“H”作为用户状态。
当回拨电话时,只使用用户状态=自动完成中的文本。