2010-10-12 114 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 ... 
     ... 
    } 
}