对不起,我无法发布代码,但这里有详细的内容。
用户打开表单 它添加了一个事件监听器,如:
GP.GlobalInfo.CommWCF.serviceClient.GetFilteredMessageCompleted += new EventHandler<GetFilteredMessageCompletedEventArgs>(serviceClient_GetFilteredMessageCompleted);
然后向服务器发送异步消息以从数据库获取所需数据。 同时,表单添加另一个事件监听器,然后发送另一条消息:
GP.GlobalInfo.CommWCF.serviceClient.GetFilteredMessageCompleted += new EventHandler<GetFilteredMessageCompletedEventArgs>(serviceClient_GetFilteredMessageCompletedAnother);
所以客户端(表单)正在等待返回两条消息。 一旦返回消息,表单将在网格中显示数据。
似乎没有按照我的预期工作。不知何故,消息卡在某处。 所以,我想知道我的做法是否错误。
另一种情况是,我可以点击屏幕上有五个对象。 这五个对象将使用相同的类来创建。 单击对象会带来包含相应数据的表单。 如果我单击第一个对象,表单将添加一个事件侦听器并向服务器发送一条消息。 当表单等待数据时,我关闭表单,然后通过单击另一个对象打开另一个表单。 新表单将添加一个事件侦听器并将新消息发送到服务器。
同时,服务器一直在处理第一个表单消息,并将结果返回到第二个表单..而不是第一个表单(已关闭)。
这就是我现在所经历的。 任何人都可以尽快给我一些解决方案,以便更好地理解Silverlight和WCF。 我想我应该向服务器发送一条停止消息或其他东西..
-------老问题----------
您好,我在客户端和服务器之间进行通信时遇到了一些问题。
打开表单时,会打开三个侦听器。每个监听器都获取所需的数据。
我认为(不确定)Silverlight会在同时使用这三个听众进行通信时卡住。
那么,我是否应该只使用一个同时运行在Silverlight中的侦听器? 好像,
客户询问服务器的数据
客户端从服务器询问B数据
客户端将C数据保存到服务器
那些东西不能同时完成? 我是否始终确保客户端和服务器之间的单一通信过程?
由于
答案 0 :(得分:0)
问题是事件处理程序只是告诉“当这种操作完成时,给我打电话”。事件处理程序与特定调用无关,而与操作的种类无关。
如果要调用两次相同的操作,则无法附加两个事件处理程序,并且期望每个调用都调用相应的处理程序。发生的事情是,当一个操作完成时,将调用附加到该操作的每个处理程序。
您可以按照以下方式解决问题:
虚拟示例:
...
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 ...
...
}
}