Nee, die Komponenten sind ja nicht threadsave und ohne die Synchronisierung startet das Zurücksetzen eventuell zu früh.
Die Animation scheint blockierend abzulaufen und demnach wartet das Synchronize auf das Ende.
Leider ist es dennoch unschön, denn man sieht den Schalter noch umswitchen, bevor er schnell wieder zurück springt.
Witziger Weise ist das nur so, wenn man nur IsChecked auf False setzt ... beim Anzeigen einer
Exception ist diese Animation nicht mehr zu sehn.
Delphi-Quellcode:
// btTcpOpen.IsChecked := FeigTCP.IsActive;
TThread.CreateAnonymousThread(procedure // die Animation und eine schrottige Implementierung verhindern das Zurückschalten
begin
TThread.Synchronize(nil, procedure
begin
btTcpOpen.IsChecked := not FeigTCP.IsActive; // nochmal zurück, sonst bekommt der blöde Button es eventuell nicht mit
btTcpOpen.IsChecked := FeigTCP.IsActive;
end);
end).Start;
Ja, ich schreib bei jedem Bugfix emotionsgeladen das Warum dazu, auch bei OpenSource-Codes, damit jeder weiß warum das dort so ist.
Irgendwo muß man sich ja abreagieren, sonst würde man noch öfters wo anders seine Emotionen rauslassen, wenn es sich anstaut.
(ich würde das aber nicht jedem empfehlen, sonst bestehen viele Programme nur noch aus Schimpfworten)
Ich hatte keine Lust nur wegen dem Bugfix System.Threading einzubinden, außerdem gibt es das noch nicht lange, was für eine Komponente etwas ungünstig ist, darum TThread.CreateAnonymousThread().Start statt TTast.Run(). (gut, wenn TThread.Queue() richtig arbeiten würde, wäre es noch einfacher
)
Jetzt brauch ich nur noch eine Metrik, die auf Schimpfworte und das Wort Bugfix reagiert und die Anzahl der normalen Kommentare damit vergleicht.