ich glaub so läuft es besser
Code:
Procedure TMyForm.MyButtonClick (Sender : TObject);
Begin
[b]UserPressedCancelButton := False;[/b]
Repeat
DoSomething;
Application.ProcessMessages;
Until UserPressedCancelButton;
End;
Wenn
DoSomething unter 100ms (Erfahrungswert) benötigt dann ist das Programm noch "gut" bediehnbar.
Darüber fängt es störend an zu stocken, weßhalb sich da der Aufwand für einen Thread voll rentiert.