【发布时间】:2010-09-21 17:13:21
【问题描述】:
我必须构建一个应用程序,该应用程序将多次使用 Webclient 从服务器中检索每“t”秒的信息。
这是一个小计划,向您展示我在应用程序中所做的事情:
- 连接到返回 GUID(用户唯一 ID)的 Web 客户端“USER_LOGIN”。我保存它并保留它以在将来的 Web 客户端调用中使用它。
- 使用我之前保存的 GUID 作为参数连接到 Web 客户端“USER_GETINFO”。此 Web 服务返回包含我所有个人用户信息(我的姓名、年龄、电子邮件等)的字符串数组。 => 我这样保存数组信息:Textblock.Text = e.Result[2]。
- 启动 Dispatcher.Timer 2 秒勾选以启动我的循环。 (这样做的目的是检索信息并每 2 秒更新一次)
- 连接到 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