I've created a workaround by adding a method to both the thread class(SearchThread) and container (FileSearch) which is called using Synchronize at the end of TThread.Execute. Though I would still be interested to know why OnTerminate cannot access some/all VCL components, despite the help saying so (I would also assume OnTerminate is called in the main thread, though perhaps that assumption is incorrect)