c# - Silverlight 中的同步 WebClient 下载

标签 c# silverlight web-services json webclient

我需要下载一个字符串(特别是来自 PHP Web 服务的 JSON 数组结果),作为返回字符串的函数,而不是 DownloadStringAsync。我需要这个,因为我正在编写一个下载字符串的函数,然后将其转换为 JsonArray。

我正在使用 Visual Studio Ultimate 2010,我正在开发 Silverlight 应用程序,我们将不胜感激。

最佳答案

您正在寻找的不是同步工作流程(这在 Silverlight 中即使不是不可能,也是非常困难的)。相反,您希望能够按顺序管理异步工作流程。您希望能够说“从 Web 服务下载此字符串,然后将该字符串转换为 JSON 数组”,而无需处理回调和事件的困惑。

这里有好消息和坏消息。好消息是这个问题有一个解决方案 - 它称为 Coroutines 。协程是一种停止执行连续代码片段直到最后一部分完成的方法,即使该部分是异步的。

坏消息是协程并不是在 C# 中原生实现的(尽管它们是 coming in C# 5 )。您可以实现自己的顺序工作流程,并且有一篇关于它的绝对精彩的文章 here 。这是一篇很长的文章,如果您以前从未做过的话,会有点困难。

但不要绝望!有一个更简单的方法。 Caliburn.Micro是一个MVVM框架,实际上有一个简单的协程实现。事实上,如果您确实愿意,您可以非常轻松地使用 Caliburn.Micro 协程,而无需使用框架的任何其他部分。 Caliburn.Micro 的创建者 Rob Eisenberg 有一篇关于协程的优秀文章,包括理论和实践,here

基本上你的代码最终会看起来像这样:

public IEnumerable<IResult> DoTheThing() {
  var json = new FetchString("webserviceaddress.asmx");
  yield return json;
  var jsonStr = json.Result;
  var jsonArray = createJsonArray(jsonStr);
  // do stuff with the array
}

至少我认为这就是您正在寻找的:)

关于c# - Silverlight 中的同步 WebClient 下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5466020/

相关文章:

javascript - 将实体图深入到 2 系列条形图

c# - 如何确定字符串是否包含忽略区分大小写的特定子字符串

c# - WPF 中的验证错误样式,类似于 Silverlight

c# - 有人可以解释一下 Child.Measure(availableSize) 在 silverlight 中的作用吗?

java - Apache CXF : multiple endpoints or multiple CXFServlet servlets?

C#、XNA、FileStream、内存不足异常

c# - 如何从枚举中提取数据并将其放入 IEnumerable 中?

c# - 在 silverlight 和 WPF 中实现多语言应用程序的最佳方式

java - JDBC 的 rs.getString() 不会返回查询结果的值

java - Web 服务上的自定义 401 错误 (JBoss)