Лучше не наследоваться в отдельный класс от TThread, как это делалось раньше в Delphi.
Это громоздкий и запутанный код.
Лучше используйте анонимные потоки. Вот вам шаблон:
http://blog.marcocantu.com/blog/2014_may_background_delphi_android_threads.html
TThread.CreateAnonymousThread(
procedure
begin
// выполняется в потоке
TThread.Queue(nil,
procedure
begin
/// выполняется в главном потоке, когда завершиться анонимный поток.
end);
end
).Start;
procedure TForm5.Button3Click(Sender: TObject);
begin
TThread.CreateAnonymousThread(procedure ()
begin
// выполняется в потоке
TThread.Synchronize (TThread.CurrentThread,
procedure ()
begin
// выполняется в главном потоке, но при этом анонимный поток еще продолжит работать, но сейчас приостановлен
end);
end).Start;
end;
И помните что с элементами GUI нельзя работать из другого потока, только из главного ( TThread.Queue, TThread.Synchronize). Иначе будет Access Violation, который будет выскакивать случайным образом.