winapi — Как правильно дождаться, когда IWebBrowser2 завершит работу с «документом» событие в C ++?

Я написал класс C ++, который инкапсулирует веб-браузер (вдохновленный этот). Один из методов класса принимает HTML-код в виде строки и отображает его в браузере. Рендеринг в браузере выполняется асинхронно, и в некоторых ситуациях необходимо дождаться завершения загрузки документа, прежде чем продолжить. Я не уверен, правильно ли я это делаю.

Что я делаю, так это открываю новый документ, звоню IHTMLDocument2::put_onreadystatechange (передавая экземпляр EventSink класс, который я реализовал), и вызов IHTMLDocument2::write отрендерить нужный HTML. Это все сделано в основном потоке.

Затем основной поток продолжается с другими вещами. Через некоторое время, когда состояние готовности меняется, браузер вызывает EventSink::Invoke, Там я звоню IHTMLDocument2::get_readyState и проверьте, равно ли оно complete, Это также происходит в основном потоке (вызываемом COM через заглушку клиента, если мое понимание верно).

Проблема заключается в том, что, хотя я обнаруживаю, когда загрузка документа завершена, основной поток в это время занимается другими делами, возможно, обращаясь к HTML DOM. Так что я бы хотел Подождите для заполнения документа сразу после звонка IHTMLDocument2::write, Как этого добиться? Я не могу установить семафор события в приемнике событий и ждать его, потому что оба фрагмента кода выполняются основным потоком. Так я должен действительно использовать рабочий поток здесь? Я несколько смущен тем, какой поток будет делать что. Например. поток, вызванный заглушкой COM-клиента, установит семафор события после завершения загрузки, но какой это поток — всегда основной поток или поток, создавший COM-объект? Любая помощь приветствуется.

2

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]