多个WebClient可以相互干扰吗?

时间:2010-09-01 15:40:09

标签: c# multithreading silverlight web-services

我必须构建一个应用程序,它将多次使用Webclient从服务器检索每个“t”秒信息。

这是一个小计划,向您展示我在我的应用程序中正在做什么:

  1. 连接到Web客户端“USER_LOGIN”,它返回GUID(用户唯一ID)。我将其保存并保留在将来的Web客户端调用中使用它。
  2. 使用之前保存的GUID作为参数连接到Web客户端“USER_GETINFO”。此Web服务返回一组字符串,其中包含我的所有个人用户信息(我的姓名,年龄,电子邮件等...)。 =>我用这种方式保存数组信息:Textblock.Text = e.Result [2]。
  3. 启动Dispatcher.Timer并使用2秒Tick来启动我的循环。 (目的是检索信息并每2秒更新一次)
  4. 连接到我的计时器中的Web客户端“USER GETFRIEND”,将GUID作为参数。它返回一个充满我朋友信息的数组(姓名,电子邮件,消息等)。我在计时器中插入了这个WebClient,所以我的朋友列表每2秒刷新一次。
  5. 我可以在步骤3之前创建所有步骤而不会出现任何错误。当我调用“USER_GETFRIEND”Web客户端时,我面临两个主要问题:

    • 一方面我发现我的线程数量急剧增加。 =>我一直认为,当WebClient完成其指令时,它会自行关闭,但显然在Asyncronous调用中不会发生。

    • 另一方面,我很惊讶地看到为两个Webclient调用使用相同的代理(即:如果我声明test.MainSoapClient proxy = new test.MainSoapClient()),我将检索的数据“USER_GETFRIEND”e.Result,直接发送到我的“USER_GETINFO”数组。因此,UI上的我的姓名和电子邮件地址被USER_GETFRIEND数组中的相同值替换。所以我的姓名更改为我的朋友电子邮件等等......

    我想知道是否可以关闭我不再使用的WebClient调用(或线程)来防止任何冲突?或者,如果有人对我的代码以及我应该如何开发我的应用程序有任何建议,请随时提出建议。

1 个答案:

答案 0 :(得分:0)

几个星期前我得到了答案,并且发现回答我自己的问题非常重要。

我的整个问题是我没有取消订阅异步调用,而且我使用的是“添加服务引用”中的相同代理类:

所以当我使用时:

proxy.webservice += new Eventhandler<whateverinhere>(my_method);

我从未这样做过:

proxy.webservice -= new Eventhandler<whateverinhere>(my_method);

希望它会对某人有所帮助。