0

我正在我的 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 上设置了一个断点。但是当我按下按钮时,断点永远不会被击中。

我在这里遗漏了什么明显的东西吗?

4

1 回答 1

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 中检查,并且互联网正在我的模拟器上运行。

于 2013-04-26T07:03:31.673 回答