在主线程中调用 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左右被这样的行为咬过)
盗用 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左右被这样的行为咬过)