2012-12-05 21 views
7

Windows Phone 8'de numaralı telefonu HttpWebRequest ile birlikte nasıl kullanabilirim?Windows Phone 8'de bir IAsyncResult'u beklemek için herhangi bir yol var mı?

IAsyncResult öğelerinin işlerini beklemek için bir yolu var mı?

private async Task<int> GetCurrentTemperature() 
{ 
    GeoCoordinate location = GetLocation(); 

    string url = "http://free.worldweatheronline.com/feed/weather.ashx?q="; 
    url += location.Latitude.ToString(); 
    url += ","; 
    url += location.Longitude.ToString(); 
    url += "&format=json&num_of_days=1&key=MYKEY"; 

    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); 
    webRequest.Method = "POST"; 
    webRequest.BeginGetResponse(new AsyncCallback(OnGotWebRequest), webRequest); 
} 

private void OnGotWebRequest(IAsyncResult asyncResult) 
{ 
    HttpWebRequest webRequest = (HttpWebRequest)asyncResult.AsyncState; 
    var httpResponse = (HttpWebResponse)webRequest.EndGetResponse(asyncResult); 
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
    { 
    string responseText = streamReader.ReadToEnd(); 
    } 
} 

Teşekkürler!

cevap

16

BeginGetRequestStream/EndGetRequestStream yöntemlerinden Task<Stream> oluşturmak için TaskFactory.FromAsync kullanın. Ardından, OnGotWebRequest'unuzdan tamamen kurtulabilirsiniz ve yanıt için aynı şeyi yapabilirsiniz. Eğer BeginFoo başlangıçta denilen maç için EndFoo yöntemini çağırmak lazım - başlamak uygunsuz bir BeginGetRequestStream çağrı tamamlandığında şu anda EndGetResponse aradığınız

Not. BeginGetResponse mu demek istediniz?

+0

ve başlangıç ​​/ bitiş hakkında haklısınız. Teşekkürler! – swinefeaster

+1

, Task 'un nasıl oluşturulacağı ve kullanılabileceği hakkında bir örnek verebilir misiniz? –

+1

[Bu soru SO] 'da mükemmel bir çalışma örneği buldum (http://stackoverflow.com/a/14098942/831825). –

4

Microsoft.Bcl.Async paketini yüklerseniz, HttpWebRequest için olanlar da dahil olmak üzere birkaç async -ready uzantı yöntemine sahip olursunuz.

+0

Bu günlerde [bu blog gönderisi] üzerine tökezledim (http://wp.qmatteoq.com/async-targeting-pack-for-visual-studio-2012-why-its-useful-also-for-windows- WP8'deki Microsoft.Bcl.Async paketinin nasıl kullanılacağını açıklayan telefon-8-projeleri /). –

İlgili konular