Как получить текущий код состояния в элементе управления WebBrowser?

Мне нужно было получить код состояния http со страницы, загруженной в веб-браузере, в итоге я получил это решение:

Я использую событие NavigateError из экземпляра WebBrowser ActiveXInstance. Но это не работает должным образом: я получаю только код состояния в случае ошибки (очевидной, как и имя метода), если страница не может быть загружена, и пользователь wb.Refresh() загружает ее, и загрузка в порядке, и у меня есть только старый код ошибки статуса http сохранен, потому что успешная загрузка не меняет мой код статуса http. Как мне это решить?

public doSomething()
{
    SHDocVw.WebBrowser axBrowser = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
    axBrowser.NavigateError += new SHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(axbrowser_navigatorError);
}

public void axbrowser_navigatorError(object pDIsp, ref object URL, ref object frame, ref object statusCode, ref bool Cancel)
{
    statuscodeLabel.Text = statusCode.ToString();
    int.TryParse(statusCode.ToString(), out httpCode);
}

person Jack    schedule 13.07.2014    source источник
comment
NavigateComplete2 срабатывает, когда ошибок нет. Так что используйте его, чтобы сбросить свой код состояния.   -  person Hans Passant    schedule 14.07.2014
comment
Используя это, я могу просто предположить, что ошибки не произошло, но не могу получить код состояния http, поскольку его аргументы object pDisp, ref object url, где pDsip — это экземпляр WebBrowser (где мы не можем получить код состояния http без моего axbrowser_navigatorError()), а url — это URL-адрес, который мы повторно обрабатывать, не так ли?   -  person Jack    schedule 14.07.2014
comment
Похоже, это просто эквивалент DocumentCompleted для WebBrowser...   -  person Jack    schedule 14.07.2014


Ответы (2)


Refresh WebBrowser сильно отличается от Navigate/Navigate2. Для обновления не запускается NavigateComplete2. Я не думаю, что вы можете получить код состояния для обновления, если вы не прибегнете к какому-либо более низкому уровню обработчик приложений. Связано: Обновление Wpf WebBrowser.

person noseratio    schedule 14.07.2014

Вы можете получить WebResponse из NavigationEventArgs в LoadComplete() это также должно срабатывать при обновлении страницы.

person Ross Bush    schedule 13.07.2014
comment
Это метод из какого класса? Я не могу найти его ни в WebBrowser, ни в (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance. Это msdn.microsoft.com/en-us/library/system.web.ui.page.loadcomplete(v=vs.110).aspx, о котором вы говорите? - person Jack; 13.07.2014
comment
Можете ли вы использовать элемент управления WebBrowser из панели инструментов. Этот оборачивает ActiveX, но добавляет больше контроля. - person Ross Bush; 14.07.2014
comment
Это то, что я использую. Обратите внимание на приведение в функции doSomething(). Дело в том, что вы не можете получить код состояния http только с помощью веб-браузера. - person Jack; 14.07.2014