Googleマップを表示するにはTWebBrowserを使用します。問題は、マップをロードしている間、メインUIスレッドをブロックすることです。別のスレッドで地図を更新することは可能ですか?別のスレッドでTWebBrowserを更新しますか?
編集: 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は非同期に動作するためです。あなたはマップをロードするために使用しているコードを表示できますか? – RRUZ
www.bsalsa.comからTEmbeddedWBで試しましたか?それはすでに解決策があるかもしれませんし、それに切り替えて非同期の負荷が働くのはかなり簡単です。 –
RRUZとWarrenPの両方の提案に感謝します。 RRUZは、すでにTWebBrowserで非同期読み込みが行われているということです。だから私の場合、理由は別のものです。コードがかなり複雑であるため、調査する必要があります... –