30-11-2024, Saat: 16:11
Create metodunda tekrar Start kullanmanız problemin kaynağı olarak görülüyor. Fakat bu sorun giderilse dahi Assigned ve Finished gibi kontrol blokları oluşturduğunuz Thread için tekillik sağlamayacak. ProductThread değişkeni, TProductThread sınıfının örneğini temsil ettiği için Assigned bloğu her defasında True olarak yorumlanacaktır. Tüm bunların haricinde @Tuğrul HELVACI bey'in belirttiği hususları da uygulamanın stabil çalışması için sonrasında ayrıca değerlendirmeniz gerekiyor. Mevcut kodlar üzerinden yapılabilecek bir yaklaşım için aşağıdaki kod bloklarında değişiklik yapabilirsiniz.
ProductThread: array of TProductThread;
constructor TProductThread.Create(AOwnerForm: TForm1);
begin
FOwnerForm := AOwnerForm;
FreeOnTerminate := True; // Thread tamamlandığında serbest bırakılır
FErrorMessage := ''; // Hata mesajını sıfırla
inherited Create(False);
end;
procedure TProductThread.UpdateUI;
begin
// Ana formdaki UI'yi güncelle
FOwnerForm.Memo1.Lines.Add('İşlem tamamlandı!');
SetLength(ProductThread, 0);
end;
procedure TProductThread.HandleError;
begin
SetLength(ProductThread, 0);
if FErrorMessage <> '' then
ShowMessage('Hata: ' + FErrorMessage);
end;
procedure TForm1.StartThread;
begin
if Length(ProductThread) = 0 then
begin
SetLength(ProductThread, 1);
ProductThread[0] := TProductThread.Create(Self);
end
else
ShowMessage('Thread hâlen çalışıyor. Lütfen bekleyin.');
end;

