TWebBrowser를 사용하기위한 샘플 코드는 일반적으로 을 호출하여 ReadyState
이 READYSTATE_LOADED
일 때까지 호출합니다.TWebBrowser 및 ProcessMessages
는 예를 들어, Embarcadero forums에서 일부 코드는 TWebBrowser에 HTML 문자열을로드 : ProcessMessages를 호출
내가 알고있는 것처럼mWebBrowser->Navigate(L"about:blank");
while (mWebBrowser->ReadyState< READYSTATE_LOADED)
Application->ProcessMessages();
// load mWebBrowser from TStreamAdapter
가, 위험, 그것은 재진입 문제를 만들 수 있기 때문이다. 예를 들어 사용자가 양식의 닫기 버튼을 클릭하면 해당 메시지는 ProcessMessages에 의해 처리되어 함수가 반환 될 때 TWebBrowser 인스턴스가 더 이상 존재하지 않게됩니다.
이 정보를 올바르게 이해하고 있습니까?
그렇다면 ProcessMessages의 위험없이 메시지를 처리해야하는 TWebBrowser의 필요를 처리하는 "안전한"방법이 있습니까? 아니면 모든 TWebBrowser 코드를 비동기 적으로 재 설계해야합니까?
그래서 한 가지 (빈 페이지 설정)하고 다음으로 처리하려는 경우 ProcessMessages에 의존하는 것이 안전하지 않다고 생각합니다. –
또한 더 적절한 이벤트 처리기를 사용할 수 있습니까? 예제 코드는'READYSTATE_LOADED'를 기다린다. 아마도'OnDocumentComplete'와'READYSTATE_COMPLETE' 전에 일어난다. (실제로는'about : blank'로 탐색 할 때, 거의 차이가 없다고 생각합니다.) –
이 예제에서는 잘못된 이벤트가 발생했을 가능성이 있지만 그 개념은 확실합니다. 이벤트 기반 디자인으로 전환하십시오. –