سلام. همانطور که آقای زالی فرمودند روش طراحی کارها به روش مالتی ترد با حالت عادی تفاوت داره. اگر جایی نیاز بود تا توقف داشته باشید و منتظر نتیجه بمانید میتوانید از Future هم استفاده کنید که کلاسهای مربوطه در نسخه های جدید دلفی یعنی از نسخه XE7 به بعد وجود دارند. به عنوان یک مثال میتوانید از کدی که نوشته ام بهره لازم را ببرید:
uses System.Threading;
var
FutureInt: IFuture<Integer>;
procedure TForm3.Button1Click(Sender: TObject);
begin
TTask.Run(
procedure
var
resultInt : integer;
begin
FutureInt := TTask.Future<integer>(
function: Integer
begin
{ some calculation that takes time}
Sleep(3000);
Result := Random(1000);
end);
resultInt := FutureInt.Value;
TThread.Synchronize(nil,
procedure
begin
Caption := resultInt.ToString;
end);
end);
end;
موفق باشید ...