Stealing from Uwe Raabe's article Synchronize and Queue with Parameters I do this:
if GetCurrentThreadID = MainThreadID then
  FDataLogger(IntToStr(lNrItems) + ' elements:')
else
  TThread.Synchronize(nil,
          procedure
          begin
            FDataLogger(IntToStr(lNrItems) + ' elements:');
          end);
But if I just
  TThread.Synchronize(nil,
          procedure
          begin
            FDataLogger(IntToStr(lNrItems) + ' elements:');
          end);
that seems to work as well.
Since the first construct leads to more code, is there really much benefit from distinguishing the main thread?
 
    