1

我正在尝试在 windows phone 8 中制作一个应用程序,并通过将其编码为简单的类来轻松扩展或更改。我想使用执行 HTTP POST 以将用户登录到服务的 webclient 进行简单的 web 调用。这是我到目前为止的流程:

  • 用户输入用户名和 api 详细信息,或者从以前保存的详细信息中调用它们。
  • WebClient 对 Web 服务进行 POST 并接收包含用户信息等的 XML 响应。
  • 设置后执行回调WebClient.UploadStringCompleted += new UploadStringCompletedEventHandler(name)
  • 用户信息被处理并用它完成。

由于各种原因,主要是希望将代码写入类并最终将代码作为免费 SDK 发布给其他开发人员,我希望流程看起来像这样:

  • 用户输入详细信息或从保存的详细信息中调用。
  • 类中的函数调用类似于if(class.Authenticate(user,apikey)){logged in stuff};返回boolean值甚至更好的整数值,因此我可以轻松处理来自 Web 服务的错​​误。

我尝试过的任何事情都无法完成这项工作,我无法弄清楚如何使其与 async 和 await 一起工作,因为 webclients 似乎只是在他们自己的线程上执行并且不会为我保留一个直到回调是完全的。

我在某处找到了一个自定义 webclient 类,但它只执行 GET 请求,这不足以满足我的需求。

4

1 回答 1

1

你不想这样做。

为此,您需要阻塞执行线程,直到服务器响应:
- 这可能需要很长时间。
- 如果在 UI 线程上,这将阻止用户与 UI 交互。
- 如果没有连接或连接速度很慢怎么办

这就是WebClient没有同步调用方式的原因。

有一些方法可以使执行看起来同步,但你会从学习使用框架并理解它为什么希望你以特定方式工作以及为什么这适用于偶尔连接的设备中获得更多。

您还可以通过发出 Awaitable 请求使此代码看起来是同步的。在http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx上查看更多信息

于 2013-01-23T15:13:53.170 回答