2013-02-25 5 views
2

WPF 응용 프로그램, Windows Phone 8 응용 프로그램 및 이후 Windows 8/RT 응용 프로그램 모두에서 사용할 수있는 라이브러리를 디자인/재사용하려면 HttpWebRequest 호출을 필요로합니다. 기존 응용 프로그램을 손상시키지 않는 것이 바람직합니다 .Windows Phone 8의 HttpWebRequest 동기

문제는 코드가 이미 ManuelResetEvent를 사용하여 웹 요청을 동 기적으로 처리하는 것입니다. 그것은 WPF 및 Windows 8 RT에서 완벽하게 작동하지만, 윈도우 폰 8 (적어도 에뮬레이터)에서, 프로그램이 말한 여기로 걸어 :

ManualResetEvent with HttpWebRequest on WP7

을 내가 모두가 작업 또는 스레드에서 호출을 캡슐화하는 시도했지만 그것은 여전히 ​​동일합니다.

그래서 async/await을 사용하도록 코드를 변경했으며 물론 WP8 & Win 8에도 완벽하지만 데스크톱 응용 프로그램은 XP 호환성을위한 .NET 4.0 프레임 워크를 목표로합니다. 물론, 비주얼 스튜디오 2012 팩 타겟팅 비동기 존재하지만,이 두 가지 문제가있다 :

데스크톱 응용 프로그램 코드를 다시 작성해야
  • /주의/비동기 테스트를 기다리고
  • 모노의
  • 안정 버전은 지원하지 않습니다 비동기/await를

그래서, 난 그냥보고, 비동기 동기 방법 태그 호출 시도 (아마도 비동기 작동 할 수 모노 런타임에 실행 한 후 Windows에서 팩을 표적으로 컴파일? 테스트해야합니다). 여기 주어진 AsyncHelpers 사용 :

How would I run an async Task<T> method synchronously?

그것은 WPF 및 Windows 8 응용 프로그램에서 작동을하지만, 윈도우 폰에 달려 8

누군가가 동기 코드 (또는 동기보고를하는 방법을 알고 있나요 Windows Phone에 매달리지 않고 도처에서 사용할 수있는 비동기 코드)

답변

0

아마도 구름의 Result 속성을 사용하십시오. .NET 4.0/4.5 및 Windows Phone 8에서 작동합니다.

0

HttpWebRequest는 UI 스레드를 사용하여 요청을 처리하지만 이유는 묻지 않습니다.

따라서 UI 스레드를 잠그면 결과를 기다리려고하면 요청이 완료되지 않고 요청이 완료되지 않고 UI 스레드가 잠길 때까지 UI 스레드를 잠그기 때문에 교착 상태가 발생합니다.