Aber vor dem
TThread.Synchronize
oder
TThread.Queue
immer vorher prüfen ob man sich ausserhalb des MainThread-Kontext aufhält.
Delphi-Quellcode:
if MainThreadID <> TThread.CurrentThread.ThreadID then
TThread.Synchronize(...)
else
...
end;
... und bevor man das macht, immer zuerst prüfen ob man sich in Delphi 2009 aufhält
Delphi TThread.CurrentThread and EAccessViolation
Bis 2009 war System.IsConsole geeignet und wird z.B. im
Indy Telnet Client Quelltext (IdTelnet) verwendet, aber ab 2010 ist CurrentThread natürlich erste Wahl.