Если хотите работать с объектом потока и менять его параметры или вызывать некую процедуру, можно либо создать в потоке очередь сообщений и из главного потока слать PostThreadMessage (как я уже писал), или сделать тоже самое на событиях.
Код:
type
TThr = class (TThread)
private
FLock: TCriticalSection;
FFiled: SomeType;
FSetEvent: TEvent;
function GetField: SomeType;
procedure SetField(Value: SomeType);
public
property Field: SomeType read GetField write SetField;
end;
function GetField: SomeType;
begin
FLock.Enter;
try
Result := FField;
finally
FLock.Leave;
end;
end;
procedure SetField(Value: SomeType);
begin
FLock.Enter;
try
FField := Value;
finally
FLock.Leave;
end;
FSetEvent.SetEvent;
end;
procedure Ececute();
begin
Handles[N] := FSetEvent.Handle;
case WaitForMultiplyObjects(...) of
Wait_Object_0 + N: {сработало событие изменения поля};
end;
end;
Написал на коленке, могут быть ошибки. Если надо, где-то есть примерчик на сообщениях.