unit PrimeThread; interface uses Classes; type TPrimeThrd = class(TThread) private FTestNumber: integer; FResultString: string; protected function IsPrime: boolean; procedure UpdateResults; procedure Execute; override; public property TestNumber: integer write FTestNumber; end; implementation uses SysUtils, Dialogs, PrimeForm; procedure TPrimeThrd.UpdateResults; begin PrimeFrm.ResultsMemo.Lines.Add(FResultString); end; function TPrimeThrd.IsPrime: boolean; {omitted for brevity} procedure TPrimeThrd.Execute; begin if IsPrime then FResultString := IntToStr(FTestNumber) + ' is prime.' else FResultString := IntToStr(FTestNumber) + ' is not prime.'; Synchronize(UpdateResults); end; end.