【问题标题】:Can multiple WebClient interfere with each other?多个 WebClient 可以互相干扰吗?
【发布时间】:2010-09-21 17:13:21
【问题描述】:

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

这是一个小计划,向您展示我在应用程序中所做的事情:

  1. 连接到返回 GUID(用户唯一 ID)的 Web 客户端“USER_LOGIN”。我保存它并保留它以在将来的 Web 客户端调用中使用它。
  2. 使用我之前保存的 GUID 作为参数连接到 Web 客户端“USER_GETINFO”。此 Web 服务返回包含我所有个人用户信息(我的姓名、年龄、电子邮件等)的字符串数组。 => 我这样保存数组信息:Textblock.Text = e.Result[2]。
  3. 启动 Dispatcher.Timer 2 秒勾选以启动我的循环。 (这样做的目的是检索信息并每 2 秒更新一次)
  4. 连接到 Web 客户端“USER GETFRIEND”,它位于我的计时器中,将 GUID 作为参数提供给他。它返回给我一个包含我的朋友信息(姓名、电子邮件、消息等)的数组。我在计时器中插入了这个 WebClient,所以我的朋友列表每 2 秒刷新一次。

在第 3 步之前,我可以毫无错误地创建所有步骤。当我调用“USER_GETFRIEND”Web 客户端时,我面临两个主要问题:

  • 一方面,我注意到我的线程数急剧增加。 => 我一直认为当 WebClient 完成指令后它会自行关闭,但显然这不会发生在异步调用中。

  • 1234563 “USER_GETFRIEND” e.Result,直接发送到我的“USER_GETINFO”数组。因此,我在 UI 上的姓名和电子邮件地址被 USER_GETFRIEND 数组中的相同值替换。所以我的名字变成了我朋友的电子邮件等等......

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

【问题讨论】:

  • “WebClient”是什么意思?
  • 仅供参考:我在 Silverlight 4 中使用 c# 编程。我所说的 WebClient 的意思是使用 WebService。当您在 Silverlight 中执行此操作时,它必须处于异步模式并包含在 EventHandler 中。
  • @John Saunders:可能是这样的:msdn.microsoft.com/en-us/library/…
  • 我已经阅读了整个 MSDN 文档,但与我的问题无关。
  • @dtb:我不这么认为。他谈论“网络客户端”就像谈论“添加服务参考”中的代理类一样。

标签: c# multithreading silverlight web-services


【解决方案1】:

几周前我得到了答案,并发现回答我自己的问题很重要。

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

所以当我使用时:

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

我从来没有这样做过:

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

希望对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    相关资源
    最近更新 更多