2010-10-12 113 views
0

對不起,我不能發佈代碼,但這裏是詳細發生的事情。客戶端和服務器之間的silverlight通信

用戶打開窗體 它添加一個事件監聽器等:

GP.GlobalInfo.CommWCF.serviceClient.GetFilteredMessageCompleted += new EventHandler<GetFilteredMessageCompletedEventArgs>(serviceClient_GetFilteredMessageCompleted); 

,然後發送一個異步消息發送到服務器,以獲得所需的從數據庫中的數據。 同時,形式增加了另一個事件偵聽器,然後發送另一個消息:

GP.GlobalInfo.CommWCF.serviceClient.GetFilteredMessageCompleted += new EventHandler<GetFilteredMessageCompletedEventArgs>(serviceClient_GetFilteredMessageCompletedAnother); 

所以客戶端(形式)正在等待要被返回的兩個消息。一旦返回消息,表單將在網格中顯示數據。

它似乎不工作,因爲我期望。不知何故消息卡在某處。所以,我想知道我的方法是否是錯誤的。


另一種情況是,有我可以點擊屏幕上的五個對象。 這五個對象將使用相同的Class創建。 單擊一個對象將帶有相應數據的表單。 如果我單擊第一個對象,表單將添加一個事件偵聽器並向服務器發送消息。當表單正在等待數據時,我關閉表單,然後通過單擊另一個對象打開另一個表單。 新表單將添加一個事件偵聽器並向服務器發送一條新消息。

與此同時,服務器一直在處理第一個表單消息,並將結果返回給第二個窗體..不是第一個窗體(已關閉)。

這就是我現在的經歷。 任何人都可以給我一些解決方案,以更好的行爲和理解silverlight和WCF。 我想我應該發送停止消息發送到服務器或東西..

-------老問題----------

您好我似乎有一些問題與客戶端和服務器之間的通信。

當表單打開時,會打開三個偵聽器。每個監聽者都可以獲得所需的數據。

我認爲(不確定)silverlight在卡巴同時使用這三個監聽器的時候卡住了。

那麼,我應該只使用一個運行在silverlight中的監聽器嗎? 這麼喜歡,

客戶要求從服務器
客戶要求B數據的數據從服務器 客戶節省C數據服務器

這些東西不能在同一時間做了什麼? 我是否總是確保客戶端和服務器之間的單一通信過程?

感謝

+1

嗯..你可以在一個更具體的方式解釋一下你的「聽衆」的意思,而究竟是什麼你的問題。如果你可以提供一些代碼,那會更好。可悲的是,現在沒有人能夠回答你。 – Eilistraee 2010-10-12 17:06:02

回答

0

的問題是,事件處理程序只是告訴「完成時的那種操作的,叫我」。事件處理程序與特定呼叫無關,但與操作的種類有關。

如果您兩次調用相同的操作,則不能附加兩個事件處理程序,並期望每個調用都會調用相應的處理程序。會發生什麼情況是,當操作完成時,每個附加到該操作的處理程序都將被調用。

如下你能解決你的問題:

  • 附加一個單一的事件處理程序,每一個具體的操作
  • 當你調用yourOperation_Async(),您可以傳遞一個標識符userState(最後一個參數)
  • 裏面的事件處理程序你相應的行爲標識符(你可以從yourOperationCompledEventArgs.UserState檢索它),例如。更新正確的表單。

假例如:

... 
serviceClient.YourOperationAsync(formName); 
... 

void serviceClient_YourOperationCompleted(object sender, YourOperationCompletedEventArgs e) 
{ 
    if (e.UserState != null && e.UserState is string) 
    { 
     string formToUpdate = (string)e.UserState; 
     ... 
     ... update formToUpdate ... 
     ... 
    } 
}