gpt4 book ai didi

delphi - TWebBrowser 和 ProcessMessages

转载 作者:行者123 更新时间:2023-12-02 02:13:33 27 4
gpt4 key购买 nike

使用 TWebBrowser 的示例代码通常会插入一个循环来调用 Application.ProcessMessages,直到 ReadyStateREADYSTATE_LOADED

例如,来自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。您可以让主应用程序消息循环处理消息。

但是这里的代码在执行下一个任务之前等待页面加载。为了保留这种行为,您可以切换到异步事件驱动方法。删除循环并改为处理浏览器的 OnDocumentComplete 事件。只有这样,您才能从流中加载实际内容。

关于delphi - TWebBrowser 和 ProcessMessages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42010896/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com