Oder man gibt dem Thread eine Queue. In die platziert man die Arbeitsaufträge.
Der Thread arbeitet diese nun einfach ab, bis die Warteschlange leer ist und legt sich dann schlafen (Suspended).
Wird ein neuer Auftrag in die Queue geschoben, weckt dieses Ereignis den Thread wieder auf.
Nach jedem Arbeitsauftrag kann der Thread noch einen Event abschicken, das der Auftrag xy abgearbeitet ist.
Deine Umsetzung mit dem Thread ist irgendwie so eine halbtags Sache zwischen Thread und doch nicht Thread. Der Thread kopiert die Daten und die Form kontrolliert wieviele Daten kopiert wurden.
Das ist nicht nur vom Ablauf suboptimal, sondern extrem ungeschickt.
Der Thread kann die Form auch informieren, ob er fertig ist, und zwischendurch den aktuellen Status (wieviele Dateien müssen noch, wieviele sind schon, wie heißt die aktuelle Datei die kopiert wird).
In der Form brauche ich keine Schleife, keinen Timer, sondern reagiere nur auf Events.
Hier wird quasi genau sowas gerade auch besprochen