HttpWebRequest httpWebRequest = HttpWebRequest.CreateHttp(new Uri(Url, UriKind.Absolute));
httpWebRequest.BeginGetResponse(result =>
{
// Handle response
}, null);
var info = WebRequestExtensions.GetCurrentNetworkInterface(httpWebRequest);
У меня недавно была похожая проблема, и я обнаружил, что вы не можете позвонить GetCurrentNetworkInterface
до BeginGetResponse
(потому что соединение не было установлено), но если вы позвоните ей в , то BeginGetResponse
обратный вызов, запрос уже завершен, и вы получаете сообщение об ошибке «Веб-запрос уже завершен».
ДОБАВЛЕНО автором вопроса:
Полностью рабочий код, которыйпозволяет получить 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