Der Code ist auch sonst nicht wirklich robust. Wenn WriteRead mal (aus welchem Grund auch immer) nicht die volle Anzahl von Bytes schreibt, wird der Rest des Puffers einfach vergessen.
Also der Code ohne Progressbar funktioniert wie geschmiert, kaum blickt man schon ist alles fertig kopiert, aber sobald ich die Zeile ProgressBar3.Position := ProgressBar3.Position + NumRead;
einfüge... hängt das Programm.
Aus der Hüfte geschossen: füge mal ein
Application.ProcessMessages;
in der Schleife ein.