Ich habe folgende Anwendung:
Bei einem Klick auf eine Google Maps Karte werden die Koordinaten in eine
URL eingebaut und an eine Internetseite geschickt. Als response kommt ein json string.
Hier meine Abfrage:
Code:
procedure tform1.get_results;
begin
idhttp1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36';
idhttp1.Request.Accept := 'application/json, text/javascript, */*; q=0.01';
idhttp1.Request.CustomHeaders.Add('origin: https:jsontest.de');
idhttp1.Request.CustomHeaders.Add('authority:
api.jsontest.de');
result_string := idhttp1.Get('https://
api.jsontest.de/?lat=49.834227128096916&lng=8.588504446191408');
form1.create_results; // Hier wird der String dann aufgearbeitet und es wird ein marker auf die Karte gesetzt
end;
Packe ich das nun in ein OnButtonClick ereignis passiert folgendes:
Ich klicke auf die Karte und es scheint nichts zu passieren für ca. 20 Sekunden, dann erscheint erst der Marker und der Kreis. Diese Wartezeit liegt wohl daran das die response manchmal etwas dauert.
Das finde ich störend, es sollte erst der Marker und der Kreis erscheinen.
Der Rest funktioniert einwandfrei!
Also kam ich auf die idee die http get Abfrage in einen Thread einzubauen.
Sieht genau so aus, nur eben am Anfang mit:
Code:
procedure TMyThread.Execute;
begin
Der Marker un der Kreis tauchen nun sofort auf aber im weiteren verlauf gibt es Probleme mit der Zeile:
Code:
Marker.Latitude := strtofloat(lat);
Es ist aber egal welche Marker.xxx Zeile da steht. Er hat immer ein Problem
nach dieser Zeile:
Code:
Marker := GMaps1.Markers.Add;
Gestartet wird der Thread in OnMapClick ereignis der Karte:
Code:
MyThread := TMyThread.Create(true);
mythread.Resume;
Definiert wurde der thread so:
Code:
type
TMyThread = class(TThread)
procedure Execute; override;
end;
Dieses Problem hat er aber nur wenn ich das mit einem Thread mache, sonst funktioniert es. Daher bin ich mir sicher das der Fehler wegen dem thread ausgelöst wird. Das finde ich komisch. Woran könnte das liegen? Und wie bekomme ich diese Wartezeit weg bis der Marker und der Kreis erscheinen?
.