C# WebRequest始终命中NetworkError.WebRequestAlreadyFinished

C# WebRequest始终命中NetworkError.WebRequestAlreadyFinished,c#,windows-phone-8,httpwebrequest,webrequest,httpwebresponse,C#,Windows Phone 8,Httpwebrequest,Webrequest,Httpwebresponse,我有一个简单的方法,用于调用WebRequest,如下代码所示。回调总是在NetworkError.WebRequestAlreadyFinished上点击。如何修复代码,以便从回调中获取信息 private async void stkWebRequestConnInfo_Tap(object sender, System.Windows.Input.GestureEventArgs e) { HttpWebRequest request = WebRequest.Cr

我有一个简单的方法,用于调用WebRequest,如下代码所示。回调总是在
NetworkError.WebRequestAlreadyFinished
上点击。如何修复代码,以便从回调中获取信息

private async void stkWebRequestConnInfo_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        HttpWebRequest request = WebRequest.CreateHttp("http://bing.com");
        IAsyncResult result = (IAsyncResult)request.BeginGetResponse(new AsyncCallback(response_Callback), request);
    }

    private void response_Callback(IAsyncResult asyncResult)
    {
        HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;

        NetworkInterfaceInfo netInterfaceInfo = null;
        try
        {
            netInterfaceInfo = request.GetCurrentNetworkInterface();
            request.EndGetResponse(asyncResult);
        }
        catch (NetworkException e)
        {
            // Calling GetCurrentNetworkInterface will throw a NetworkException if the WebRequest has already completed.
            // To make this call succeed, make a high latency web request call. 
            if (e.NetworkErrorCode == NetworkError.WebRequestAlreadyFinished)
            {
                DisplayMessage(AppResources.MainPage_Info_CannotCallWebRequest, AppResources.MainPage_Info_NetworkInterfaceInformation, MessageBoxButton.OK);
                return;
            }
            else if (e.NetworkErrorCode == NetworkError.NetworkSelectionRequirementFailed)
            {
                DisplayMessage(AppResources.MainPage_Info_ConnectionRequirementFailed, AppResources.MainPage_Info_NetworkInterfaceInformation, MessageBoxButton.OK);
            }
        }
        catch (WebException e)
        {
            DisplayMessage(AppResources.MainPage_Info_GeneralError, AppResources.MainPage_Info_WebRequestFailed, MessageBoxButton.OK);
        }

        // Use a StringBuilder to efficiently build up an information text about this
        // NetworkInterfaceInfo.
        StringBuilder sb = new StringBuilder();

        sb.Append(AppResources.MainPage_Info_Name + " ");
        sb.AppendLine(netInterfaceInfo.InterfaceName);

        sb.Append(AppResources.MainPage_Info_Type + " ");
        sb.AppendLine(GetInterfaceTypeString(netInterfaceInfo.InterfaceType));


        DisplayMessage(sb.ToString(), AppResources.MainPage_Info_NetworkInterfaceInformation, MessageBoxButton.OK);
    }

void DisplayMessage(string text, string caption, MessageBoxButton buttonConfiguration)
    {
        Dispatcher.BeginInvoke(() =>
        {
            MessageBox.Show(text, caption, buttonConfiguration);
        });
    }

必须从UI线程调用GetCurrentNetworkInterface。因此,使用Dispatcher.BeginInvoke()包装调用

谢谢,我也引用了,但我在执行此操作时将
netInterfaceInfo
返回为null?您能否向我展示一个示例,说明如何正确实现此操作,以调用
GetCurrentNetworkInterface
,并在
消息框中显示结果?