Ich verwende Delphi anonymen Thread, um Code auszuführen. In der Mitte des Threads, ein paar GUI-Updates müssen stattfinden, ein paar Etiketten ändern etc.Wie GUI von Thread mit Delphi zu aktualisieren
Wenn ich dies innerhalb des Threads tun, die Änderungen stattfinden, aber sobald der Thread stoppt . sie verschwinden, und dann die Anwendung gibt mir das alte Fehlerfenster Handler ... (was zu erwarten ist)
System Error. Code:1400. Invalid window handle
ich die Syncronize(updateui);
Methode versucht, mit den Änderungen auszuführen (bewegte sie in eine separaten Funktion), aber ich bekomme einen Fehler auf der E2066 Missing operator or semicolon
Syncronize, die für mich überhaupt keinen Sinn macht ...
Ich habe Seite für Seite durchsucht, und sie alle scheinen es so zu nennen, aber wenn ich es tue, Ich bekomme den obigen Fehler ...
Rufe ich es falsch?
Code:
TThread.CreateAnonymousThread(
procedure
begin
main.Enabled:=false;
Loading.show;
label52.caption:=getfieldvalue(datalive.users,'users','credit_amount','user_id',user_id);
CoInitialize(nil);
if (length(maskedit1.Text)=maskedit1.MaxLength) and (pingip(serverip)=true) then
begin
if (strtofloat(label52.caption)>0) then
begin
....do some work....
Synchronize(updateui);
end
else Showmessage('Insufficient Funds. Please add funds to continue.');
end
else if (length(maskedit1.Text)<>maskedit1.MaxLength) then
begin
Showmessage('ID Number not long enough.');
end
else
begin
Showmessage('Could not connect to the server. Please check your internet connection and try again.');
end;
CoUnInitialize;
loading.close;
main.Enabled:=true;
end).start;
UpdateUI:
procedure TMain.updateui;
var
birthdate,deathdate:TDate;
begin
Panel3.Show;
Label57.Caption := 'Change 1';
Label59.Caption := 'Change 2';
Label58.Caption := 'Change 3';
Label60.Caption := 'Change 4';
Label62.Caption := 'Change 5';
Label70.Caption := 'Change 6';
ScrollBox1.Color := clwhite;
end;
Sie ** darf nicht ** Zugriff auf die Kontrollen von einem anderen Thread bei ** alle **. Kein Schreiben und kein Lesen! –
@SirRufo Ich muss ... Es gibt viele Änderungen zwischen den Datenbankaktionen. Jede Datenbankaktion benötigt etwas Zeit, und die Haupt-GUI sieht genauso aus, wie wenn sie nicht in einem Thread ausgeführt wird. Also muss ich alles oder nichts fädeln ... – Marcel
Ich habe nicht gesagt "Benutze keinen Thread". Ich sage nur: "Greife nicht auf die Steuerelemente eines anderen Threads zu als auf den MainThread" ( –