HttpWebRequest在Windows Phone 8上同步

本文关键字:同步 Phone Windows HttpWebRequest | 更新日期: 2023-09-27 18:00:51

为了设计/重用一个可用于WPF应用程序、Windows Phone 8应用程序和更高版本的Windows 8/RT应用程序的库,我们需要进行一些HttpWebRequest调用,最好是同步调用,以免破坏现有应用程序。

问题是已经到位的代码使用ManuelResetEvent同步执行web请求。它在WPF和Win8RT中工作得很好,但在WindowsPhone8(至少在模拟器上(中,程序挂起如下:

WP7 上带有HttpWebRequest的ManualResetEvent

我尝试将两者都封装在Task或Thread中,但它仍然是一样的。

因此,我将代码更改为使用async/await,它当然非常适合WP8&赢了8场,但我们的桌面应用程序正在瞄准。NET 4.0框架实现XP兼容性。当然,有适用于Visual Studio 2012的异步定向包,但有两个问题:

  • 桌面应用程序代码应该用async/await重写/仔细测试
  • Mono的稳定版本不支持async/await(也许在Windows上与async Targeting Pack兼容,然后在Mono运行时运行它可以工作?应该进行测试(

因此,我尝试同步调用async标记的方法,只是为了看看。我使用了这里给出的AsyncHelpers:

我将如何运行异步任务<T>方法同步?

它适用于WPF和Win8应用程序,但它挂在WindowsPhone8上。

有人知道如何在不挂在Windows Phone上的情况下,在任何地方都可以使用同步代码(或具有wait/async的同步代码(吗?

HttpWebRequest在Windows Phone 8上同步

也许您可以使用Task的Result属性进行云计算。它在上工作。NET 4.0/4.5和Windows Phone 8。

HttpWebRequest使用UI线程来处理请求,不要问我为什么。

因此,如果您试图通过锁定UI线程来等待结果,您将获得死锁条件,因为您锁定UI线程直到请求未完成,并且在锁定UI线程时请求将不完成。