簡體   English   中英

在Windows Phone 8上同步HttpWebRequest

[英]HttpWebRequest synchronous on Windows Phone 8

為了設計/重用可用於WPF應用程序,Windows Phone 8應用程序和更高版本的Windows 8 / RT應用程序的庫,我們需要進行一些HttpWebRequest調用,最好同步進行以不破壞現有應用程序。

問題是代碼已經就緒,可以使用ManuelResetEvent同步執行Web請求。 它可以在WPF和Win 8 RT中完美運行,但是在Windows Phone 8中(至少在模擬器上),程序會如下所示掛起:

WP7上帶有HttpWebRequest的ManualResetEvent

我都嘗試將調用封裝在Task或Thread中,但仍然相同。

因此,我更改了代碼以使用async / await,它對於WP8和Win 8當然是完美的選擇,但我們的桌面應用程序的目標是.NET 4.0框架以實現XP兼容性。 當然,有適用於Visual Studio 2012的異步定位包,但這有兩個問題:

  • 桌面應用代碼應使用異步/等待方式重寫/仔細測試
  • Mono的穩定版本不支持異步/等待(也許與Windows上的Async Targeting Pack兼容,然后可以在Mono運行時上運行它,應該進行測試?)

因此,我嘗試同步調用異步標記的方法,以了解情況。 我使用了此處給出的AsyncHelpers:

如何同步運行異步Task <T>方法?

它可以在WPF和Win 8應用程序上運行,但可以掛在Windows Phone 8上。

有人知道如何擁有一個同步代碼(或帶有await / async的同步查找代碼),該代碼可以在任何地方使用而無需掛在Windows Phone上嗎?

也許您可以使用Task的Result屬性進行雲計算。 它適用於.NET 4.0 / 4.5和Windows Phone 8。

HttpWebRequest使用UI線程來處理請求,不要問我為什么。

因此,如果您嘗試通過鎖定UI線程來等待結果,則會遇到死鎖條件,因為您將UI線程鎖定到請求未完成且UI線程被鎖定時請求也不會完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM