Shdocvw. internetexplorer. onquit срабатывает слишком рано.
Привет.
Я пытаюсь преобразовать некоторые устаревшие программы VB в c#, и у меня есть некоторый код, который запускает веб-браузер и ждет, пока пользователь что-то сделает на этой странице, которая по завершении закрывается и должна запустить InternetExplorer.Событие OnQuit.
В моем заменяющем коде на c# я делаю что-то вроде:
частная ShDocVw.InternetExplorer _IE = null;
private bool _hasQuit = false;
public void DoSomething(string someUrlWhichIsValid)
{
_hasQuit = ложь;
_IE = новый InternetExplorer();
_Т.OnQuit += это.IE_OnQuit;
_IE.Видимое = истинное;
_IE. Navigate (someUrlWhichIsValid);
_лесоруб.Отладка("Сделать... ожидание т. е. занято...");
пока (_IE.Занят)
Система.Нарезание резьбы.Нить.Сон(50);
_лесоруб.Отладка("Сделать... жду хасквита.");
в то время как(!_hasQuit)
Система.Нарезание резьбы.Нить.Сон(50);
_лесоруб.Debug ("DoSomething-теперь мы можем что-то сделать после закрытия url-формы...");
}
общественного недействительными IE_OnQuit()
{
_hasQuit = истина;
_лесоруб.Debug ("ie_onquit-получено событие quit.");
}
То, что я нахожу из вышеизложенного в своих журналах, заключается в том, что во всех случаях OnQuit запускается сразу после завершения навигации по URL-адресу, он не ждет, пока браузер завершит работу, как описано в справке MSDN по событию OnQuit.
Может ли кто-нибудь вспомнить, действительно ли это правильно работало с предыдущими версиями Internet Explorer, и есть ли способ заставить его работать с ShDocVw.Интернетэксплорер.OnQuit в сегодняшней среде настольных компьютеров и браузеров?
Заранее спасибо.
Что я уже пробовал:
private ShDocVw.InternetExplorer _IE = null; private bool _hasQuit = false; public void DoSomething(string someUrlWhichIsValid) { _hasQuit = false; _IE = new InternetExplorer(); _IE.OnQuit += this.IE_OnQuit; _IE.Visible = true; _IE.Navigate (someUrlWhichIsValid); _logger.Debug("DoSomething... waiting for IE.Busy..."); while (_IE.Busy) System.Threading.Thread.Sleep(50); _logger.Debug("DoSomething... waiting for hasquit."); while(!_hasQuit) System.Threading.Thread.Sleep(50); _logger.Debug("DoSomething - now we can do something after url form has closed..."); } public void IE_OnQuit() { _hasQuit = true; _logger.Debug("IE_OnQuit - quit event received."); }