0

Windows8マシンでWindowsPhone8の開発を開始し、VisualStudio2012に付属のエミュレーターでテストしています。メインページにボタンが1つあります。ボタンを押すと、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を見つけ、それに応じてコードを変更しました。その質問の実際の問題は、askerが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 に答える