Zitat:
Delphi-Quellcode:
procedure TMyThread.Execute;
begin
...
MThread.Synchronize(doprogress);
...
Das mit dem MThread wurde ja schon gesagt.
Wenn man in einer Klasse ist, dann Self verwenden (oder weglassen und das Self implizit nutzen).
Denn rate mal was passiert, wenn zu z.B. 2 Threads erstellst.
Dann greifst du nicht mehr auf den "aktuellen" Thread zu, sondern auf den, welcher in der globalem Variable liegt.
Nja, das mit der
VCL und Threads wurde auch schon genannt.
Was du machen kannst, ist das
Query vom Grid (der
VCL) trennen, zu aktualisieren (im thread) und es dann wieder zu verbinden (im Hautthread).
Oder die Daten im Hintergrund zu laden und dann synchronisiert in ein weiteres Dataset zu kopieren, welches am Grid hängt.
kleiner Trick, für kurze Sync-Funktionen:
Delphi-Quellcode:
procedure TMyThread.Execute;
begin
...
Synchronize(procedure
begin
FormUsed.Update;
end);
...