我正在Windows 8机器上启动Windows Phone 8开发,并在visual studio 2012附带的模拟器上进行测试。我有一个主页面,上面有一个按钮。按下按钮后,它会发出http请求。
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上设置了一个断点。但是当我按下按钮时,断点永远不会被击中。
我错过了这里明显的一切吗?
答案 0 :(得分:3)
我遇到了同样的问题,即使等待太久后我的回叫也没有被调用。
我发现此stackoverflow回答https://stackoverflow.com/a/15041383并相应地修改了我的代码。这个问题的实际问题是提问者希望在Windows Phone 8下的HttpWebRequest中有一些超时功能。计时器对我来说无关紧要,所以我只采用了以下部分代码:
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中检查,并且互联网正在我的模拟器上工作。