[英]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的異步定位包,但這有兩個問題:
因此,我嘗試同步調用異步標記的方法,以了解情況。 我使用了此處給出的AsyncHelpers:
它可以在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.