nein, ich zeichne nur alle 20ms sowas ... aber ich will eben keine ProcessMessages, sondenr nur das .paint
Willst Du eine Statusausgabe für den Progress in einem Thread?
Ich empfehle die Verwendung einer gelockten globalen variable/record. Im einfachsten Fall verwende einfach
TInterlocked.Increment(FMyProgress);
TInterlocked.Increment(FMyProgressHasChanged);
Du kannst in deiner UI einen Timer nehmen und dort alle X ms abfragen ob sich FMyProgressHasChanged geändert hat, und wenn ja dein Label/UI mit den Daten aus FMyProgress zu aktualisieren.
Schau Dir mal die Klasse TMultiReadExclusiveWriteSynchronizer an. Damit kann man sehr effektive Locks realisieren. Das Prinzip ist immer, dass ein Thread nur auf seinen Daten arbeitet und einen gelockten 2. Datensatz dafür verwendet, bei Bedarf Daten dem Hautpformular zur Verfügung zu stellen.
Ich empfehle einen riesen Bogen um TThread.Synchronize zu machen. Das Ding hätte nie erfunden werden sollen.
Falls es nicht um threads geht schau mal hier:
https://www.delphipraxis.net/1503595-post7.html
Vielleicht reicht auch schon ein Label1.Update.