Пример кода для работы с TWebBrowser обычно вставляет цикл для вызова Application.ProcessMessages
до ReadyState
: READYSTATE_LOADED
.TWebBrowser и ProcessMessages
Например, из Embarcadero forums, некоторый код, чтобы загрузить строку HTML в TWebBrowser:
mWebBrowser->Navigate(L"about:blank");
while (mWebBrowser->ReadyState< READYSTATE_LOADED)
Application->ProcessMessages();
// load mWebBrowser from TStreamAdapter
Как я понимаю, называя ProcessMessages рискованно, потому что это может создать проблемы Реентерабельность. (Например, если пользователь нажимает кнопку «Закрыть» в форме, то это сообщение может обрабатываться ProcessMessages, так что экземпляр TWebBrowser больше не существует, когда функция возвращается.)
Я правильно понимаю это?
Если да, существует ли «безопасный» способ обработки запросов TWebBrowser для обработки сообщений без рисков ProcessMessages? Или мне нужно перепроектировать весь мой код TWebBrowser для асинхронности?
Итак, я правильно понял, что если я хочу сделать одно (установить пустую страницу), а затем следующий, небезопасно полагаться на ProcessMessages? –
Кроме того, есть ли более подходящий обработчик событий для использования? Пример кода ждет 'READYSTATE_LOADED', который предположительно происходит до' OnDocumentComplete' и 'READYSTATE_COMPLETE'. (На практике, особенно при навигации по 'about: blank', я подозреваю, что разница в ней практически отсутствует или нет.) –
Правдоподобно, что у меня есть неправильное событие для этого конкретного примера, но концепция звучит. Переключитесь на дизайн, управляемый событиями. –