在主线程中调用 TThread.Synchronize

Calling TThread.Synchronize in main thread

盗用 Uwe Raabe 的文章 Synchronize and Queue with Parameters 我这样做:

if GetCurrentThreadID = MainThreadID then
  FDataLogger(IntToStr(lNrItems) + ' elements:')
else
  TThread.Synchronize(nil,
          procedure
          begin
            FDataLogger(IntToStr(lNrItems) + ' elements:');
          end);

但如果我只是

  TThread.Synchronize(nil,
          procedure
          begin
            FDataLogger(IntToStr(lNrItems) + ' elements:');
          end);

这似乎也有效。

由于第一个构造导致更多代码,区分主线程真的有很多好处吗?

虽然文档警告您这样做,但 TThread.Synchronize 中的实际代码类似于显示的包装代码。所以我很确定您可以使用较短的版本。

也许我写那篇文章的时候也被文档误导了(或者在古代可能在Delphi 5左右被这样的行为咬过)