从 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 左右的这种行为所困扰)。

关于multithreading - 在主线程中调用 TThread.Synchronize,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60737872/

10-11 19:00