2013-02-23 66 views
0

我開始在Windows 8機器上開發windows phone 8並測試Visual Studio 2012附帶的模擬器。我有一個帶有一個按鈕的主頁面。按下按鈕後,它發出一個http請求。Windows Phone 8開發:HttpWebRequest.BeginGetResponse回調從未調用

private void Button_Click_1(object sender, RoutedEventArgs e) 
{ 
    string uriString = "http://209.143.33.109/mjpg/video.mjpg?camera=1"; 
    var uri = new Uri(uriString); 
    var httpWebRequest = HttpWebRequest.Create(uri); 

    httpWebRequest.BeginGetResponse(new AsyncCallback(OnGettingResponse), httpWebRequest); 
} 

private void OnGettingResponse(IAsyncResult ar) 
{ 
    var req = ar.AsyncState as HttpWebRequest; 
    var response = (HttpWebResponse)req.EndGetResponse(ar); 
    var responseStream = response.GetResponseStream(); 
} 

我在OnGettingResponse上設置了一個斷點。但是當我按下按鈕時,斷點永遠不會被擊中。

我在這裏錯過了什麼?

回答

3

我面對同樣的問題,即使等待時間過長,我的回調也沒有被調用。

我發現這個stackoverflow答案https://stackoverflow.com/a/15041383並相應地修改我的代碼。在這個問題的實際問題是,提問者都想擁有的Windows Phone下的HttpWebRequest的一些超時功能8.具有計時器無關我,所以我只是把下面的代碼部分:

public async Task<string> httpRequest(HttpWebRequest request) 
{ 
    string received; 

    using (var response = (HttpWebResponse)(await Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, null))) 
    { 
     using (var responseStream = response.GetResponseStream()) 
     { 
      using (var sr = new StreamReader(responseStream)) 
      { 

       received = await sr.ReadToEndAsync(); 
      } 
     } 
    } 

    return received; 
} 

,並修改了我呼叫此方法爲:

var response = await httpRequest(request); 

這現在對我來說工作正常。

我也加倍檢查了ID_CAP_NETWORKING是在WMAppManifest.xml中檢查並且互聯網在我的模擬器上工作。

+0

嗨,歡迎來到Stack Overflow!一個可能的解決方案的鏈接總是受歡迎的,但請在鏈接上添加上下文(即使它是另一個Stack Overflow答案),以便其他用戶可以瞭解它是什麼以及它爲什麼存在。始終引用重要鏈接中最相關的部分。想想如果該頁面被移動到另一臺服務器或直接鏈接改變會發生什麼 - 未來的用戶將無法從答案中獲益。請看看[如何回答](http://stackoverflow.com/questions/how-to-answer)。 – Jesse 2013-04-26 07:23:10

+0

@Jesse更新了答案,謝謝! – URB 2013-04-26 07:38:19

+1

謝謝你,@URB! – Jesse 2013-04-26 12:14:52

相關問題