【发布时间】:2012-03-01 22:06:07
【问题描述】:
我使用 TWebBrowser 来显示 Google 地图。问题是它在加载地图时阻塞了主 ui 线程。是否可以在单独的线程中更新地图?
编辑: RRUZ 你是对的 TWebBrowser 对 URL 进行了异步加载。 但我发现了它为什么会阻塞的问题 来电:
if WaitWhileProcessing and (MapQueryResult.Count > 0) then
Result := MapQueryResult[0] as TMapQuery;
以及方法:
function TMapItemCollection.WaitWhileProcessing: Boolean;
var
vMaxSleepCnt: Integer;
begin
Result := True;
vMaxSleepCnt := 0;
while Processing or Loading do
begin
inc(vMaxSleepCnt);
Application.ProcessMessages;
Sleep(100);
if vMaxSleepCnt = 100 then
begin
Result := False;
Break;
end;
end;
end;
所以看来要解决这个问题,应该重构代码。但这不是这个问题的范围。
【问题讨论】:
-
您确定加载地图时哪个 GUI 冻结了吗?因为 TWebBrowser 是异步操作的。你能显示你用来加载地图的代码吗?
-
您是否尝试过使用来自 www.bsalsa.com 的 TEmbeddedWB?它可能已经有了解决方案,并且很容易切换到它并让异步负载正常工作。
-
感谢 RRUZ 和 WarrenP 的建议。 RRUZ 是正确的,它已经在 TWebBrowser 中进行了异步加载。所以在我的情况下,原因是别的。我必须调查,因为代码相当复杂......
标签: multithreading delphi delphi-2007 twebbrowser