Finally I used a normal TThread descendant, instead of using OnFinish event, I use Synchronize. Instead of starting tasks from OnFinish (maybe this was the faulty code), I start them in the Execute part or any method that was called from Execute, never from Synchronize and it works.