2015-04-25 128 views
2

我試圖使用HttpWebRequest.BeginGetRequestStream方法。在我的方法中,我得到了一些Json。我需要等待這個方法的結尾(HttpWebRequest.BeginGetRequestStream)來分析我的Json。等待HttpWebRequest.BeginGetRequestStream結束

這裏是我的代碼:

private string API_Query(string url) 
{ 
    HttpWebRequest requete = (HttpWebRequest)HttpWebRequest.Create(url); 
    requete.Method = "POST"; 
    requete.ContentType = "application/x-www-form-urlencoded"; 

    requete.BeginGetRequestStream(DebutReponse, requete);//wait the end of this method 
    //analyse the json here 
    return null; 
} 

的問題是,我不知道如何等待最終的方​​法。我嘗試了不同的任務,如任務和線程,但我不知道如何正確地做到這一點。

感謝您的幫助。

+0

如果請求是異步執行的,對您而言是否重要?因爲這就是'BeginGetRequestStream'的做法。 –

+0

是的,我喜歡這樣的應用程序不凍結。但是如果你有一個異步執行的解決方案,我可以使用後面的線程來異步執行。 – king

+0

*同步我的意思是 – king

回答

2

問題是我不知道該如何等待結束該方法。

有很多方法可以做到這一點。因爲它看起來我要同步調用請求,我建議簡單地調用GetResponseStream

private string ApiQuery(string url) 
{ 
    HttpWebRequest requete = (HttpWebRequest)HttpWebRequest.Create(url); 
    requete.Method = "POST"; 
    requete.ContentType = "application/x-www-form-urlencoded"; 

    using (var requestStream = requete.GetRequestStream()) 
    { 
     // Write to request stream 
    } 

    using (var responseStream = requete.GetResponse()) 
    { 
     // Read the respone stream, parsing out your JSON. 
    } 
} 

編輯:

正如你在評論中提到的,這是一個Silverlight項目。這意味着您沒有同步版本HttpWebRequest。相反,您可以使用WebClient

var webClient = new WebClient() 
webClient.OpenReadCompleted += OnUploadCompleted; 
webClient.OpenReadAsync(url, data); 

private void OnUploadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    if (e.Error != null) 
    { 
     // Error, do something useful 
     return; 
    } 
    using (var responseStream = e.Result) 
    { 
      byte[] data = (byte[]) e.UserState; 
      // Read response from stream. 
    } 
} 
+0

好吧非常感謝你,我會試試這個;)。 – king

+0

好吧我只是嘗試,但我沒有找到方法requete.GetRequestStream()。我只有requete.BeginGetRequestStream(),它是一樣的嗎? – king

+0

也許是因爲我正在做一個Silverlight應用程序,我不知道,或者如果我的項目是休息大聲笑。 – king