Ничего в этом коде не нужно делегировать основному потоку пользовательского интерфейса через Synchronize.
Однако при использовании TCanvas
в рабочем потоке вам необходимо Lock()
, пока вы его используете, иначе основной поток пользовательского интерфейса будет мешать ему в фоновом режиме ( ОБНОВЛЕНИЕ: в частности, основной поток пользовательского интерфейса часто выпускает HDC
s, принадлежащие разблокированным TBitmap.Canvas
и TControlCanvas
объектам, даже тем, которые используются рабочими потоками. Вы в порядке, если вы но используйте TCanvas
сам).
В качестве альтернативы просто замените TCanvas
соответствующими вызовами функций Win32 API (CreateFontIndirect()
, GetTextExtentPoint32()
), тогда вам не нужно беспокоиться о блокировка чего угодно.