我希望Network Interface
获得HttpWebRequest
我找到了WebRequestExtensions.GetCurrentNetworkInterface功能。 HttpWebRequest
也有GetCurrentNetworkInterface()
方法来执行相同操作。
这是我的代码:
HttpWebRequest httpWebRequest = HttpWebRequest.CreateHttp(new Uri(Url, UriKind.Absolute));
//this line throws InvalidOperationException
NetworkInterfaceInfo i = httpWebRequest.GetCurrentNetworkInterface();
我从UI线程执行方法调用。如果我在BeginGetResponse
异常告诉“请求已完成”后拨打电话。解决方法是什么?
异常信息:
消息为InvalidOperationException
堆栈跟踪:
at System.Net.Browser.ClientHttpWebRequest.GetConnectionDetails(IntPtr& Details, Int32& sizeofDetails)
at Microsoft.Phone.Net.NetworkInformation.WebRequestExtensions.GetCurrentNetworkInterface(WebRequest request)
答案 0 :(得分:3)
HttpWebRequest httpWebRequest = HttpWebRequest.CreateHttp(new Uri(Url, UriKind.Absolute));
httpWebRequest.BeginGetResponse(result =>
{
// Handle response
}, null);
var info = WebRequestExtensions.GetCurrentNetworkInterface(httpWebRequest);
我最近遇到了类似的问题,发现您无法在GetCurrentNetworkInterface
之前致电BeginGetResponse
(因为尚未建立连接),但如果您在中将其称为请求已经完成的BeginGetResponse
回调,并且您收到“Web请求已完成”错误。
由问题首发添加:
允许从后台线程获取NetworkInterfaceInfo
HttpWebRequest
的全工作者代码(在此示例中使用BackgroundWorker
来模拟此情况):
BackgroundWorker backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += (s, 4) =>
{
HttpWebRequest httpWebRequest = HttpWebRequest.CreateHttp(new Uri("http://stackoverflow.com", UriKind.Absolute));
EventWaitHandle Wait = new AutoResetEvent(false);
httpWebRequest.BeginGetResponse(result =>
{
Wait.Set();
}, null);
Wait.WaitOne();
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
var info = WebRequestExtensions.GetCurrentNetworkInterface(httpWebRequest);
MessageBox.Show(info.InterfaceType.ToString());
});
};
backgroundWorker.RunWorkerAsync();
在全天调试后添加:
我不能让它100%工作,特别是当加载的页面很小时。在这种情况下,“请求已完成”始终出现。但是对于大型加载页面,即使没有EventWaitHandle
答案 1 :(得分:1)
我相信你可能想看看NetworkInterface.NetworkInterfaceType财产。文档说它返回为当前互联网请求提供服务的接口类型。
如果这不是你想要的,你可能还想尝试DeviceNetworkInformation课程(我怀疑你可能已经看过这个选项。)。我想你可以使用IsCellularDataEnabled和IsWifiEnabled静态属性。