我在Silverlight 5中工作,並且正在嘗試編寫一個自動完成文本框(我使用telerik radwatermarktextbox控件和一個radcombobox顯示這些項目),其項目列表是機場列表從異步調用返回到WCF服務。silverlight自動完成對異步wcf服務
我遇到的問題是,如果我在文本框中快速輸入,多次異步調用以獲取已過濾的項目列表將被啓動(每次按鍵一次),並且它們不一定在與他們運行的順序相同 - 特別是當返回的列表很大時。
所以,如果我真的很快鍵入HPN,下面的調用踢出
異步調用與H作爲參數(#1 - 將返回231行)與HP 異步調用的參數(#2 - 將與HPN返回4行) 異步調用的參數(#3 - 將rrturn 1行)
有時我得到的結果別人之後調用#1
我不能改變WCF服務我正在向WCF服務調用或添加同步方法。
Foxpro有一個名爲CHRSAW的函數,它可以告訴你輸入緩衝區中是否有鍵等待(http://msdn.microsoft.com/zh-cn/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());
}
}
現在我已經找到了一種方法:WCF方法有一個對象UserState參數,並且我設置一個名爲_lastAsyncCall的窗體DateTime屬性,將其設置爲DateTime.Now並將其作爲用戶狀態傳遞,然後在完成的事件,我檢查用戶是否<_lastAsyncCall – 2012-04-25 14:29:05