2012-04-25 45 views
0

我在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()); 
     } 
    } 
+0

現在我已經找到了一種方法:WCF方法有一個對象UserState參數,並且我設置一個名爲_lastAsyncCall的窗體DateTime屬性,將其設置爲DateTime.Now並將其作爲用戶狀態傳遞,然後在完成的事件,我檢查用戶是否<_lastAsyncCall – 2012-04-25 14:29:05

回答

1

一個比你在評論中發表的一個更容易的解決辦法是張貼你以及發送的參數作爲用戶狀態的文本代碼。所以當尋找「H」時,你會通過「H」作爲用戶狀態。

當呼叫回來時,只使用用戶狀態=自動完成中的文本。