Leroy Carver Ответов: 0

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.");
}

0 Ответов