Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Thread Cannot call Start on a running or suspended thread hatası
#1
type
 TProductThread = class(TThread)
 private
   FOwnerForm: TForm1;
   FErrorMessage: string; // Hataları saklamak için
 protected
   procedure Execute; override;
   procedure UpdateUI; // UI'yi güncellemek için
   procedure HandleError; // Hataları UI'de göstermek için
 public
   constructor Create(AOwnerForm: TForm1);
 end;

constructor TProductThread.Create(AOwnerForm: TForm1);
begin
 inherited Create(True); // Thread suspended başlar
 FOwnerForm := AOwnerForm;
 FreeOnTerminate := True; // Thread tamamlandığında serbest bırakılır
 FErrorMessage := ''; // Hata mesajını sıfırla
 Start; // Thread başlat
end;


procedure TProductThread.Execute;
var
 JSONObject, JSONObjectCat: TJSONObject;
 DrawArray: TJSONArray;
 JSONValue: TJSONValue;
 I: Integer;
 BasURL: string;
begin
 try
   BasURL := 'https://api.trendyol.com/sapigw/suppliers/918400/products?page=0&size=300&approved=True';
   FOwnerForm.RESTClient1.BaseURL := BasURL;
   FOwnerForm.RESTRequest1.Execute;

   JSONValue := FOwnerForm.RestResponse1.JSONValue;
   if JSONValue = nil then
     raise Exception.Create('Geçerli bir JSON yanıtı alınamadı.');

   JSONObject := TJSONObject(TJSONObject.ParseJSONValue(JSONValue.ToString));
   try
     DrawArray := TJSONArray(JSONObject.FindValue('content'));
     for I := 0 to DrawArray.Count - 1 do
     begin
       with TJSONObject(DrawArray.Items[I]) do
       begin
           isim      := FindValue('title').Value;
           kategoriadi   := FindValue('categoryName').Value;
           barkod        := FindValue('barcode').Value;
           stokkodu  := FindValue('stockCode').Value;
           fiyat     := FindValue('salePrice').Value;
           miktar    := strtoint(FindValue('quantity').Value);
//            drawArraycat  := TJSONArray( FindValue('attributes') );
           if (miktar = 0) and (fiyat='0') then form1.askmem.Lines.Add(stokkodu) else if miktar = 0 then form1.amsmem.Lines.Add(stokkodu)
           else if (form1.kelimeara(stokkodu,form1.asgmem)=False) and (form1.kelimeara(stokkodu,form1.askmem)=False) and (form1.kelimeara(stokkodu,form1.amsmem)=False) then form1.adumem.Lines.Add(stokkodu);
           datayaekle(form1.listview6);
       end;
     end;
   finally
     JSONObject.Free;
   end;

 except
   on E: Exception do
   begin
     FErrorMessage := E.Message; // Hata mesajını kaydet
     Synchronize(HandleError); // Hata durumunda UI'yi bilgilendir
   end;
 end;

 Synchronize(UpdateUI); // UI'yi güncellemek için çağır
end;

procedure TProductThread.UpdateUI;
begin
 // Ana formdaki UI'yi güncelle
 FOwnerForm.Memo1.Lines.Add('İşlem tamamlandı!');
end;

procedure TProductThread.HandleError;
begin
 if FErrorMessage <> '' then
   ShowMessage('Hata: ' + FErrorMessage);
end;



procedure TForm1.StartThread;
begin
 if Assigned(ProductThread) and (not ProductThread.Finished) then
 begin
   ShowMessage('Thread hâlen çalışıyor. Lütfen bekleyin.');
   Exit;
 end;

 ProductThread := TProductThread.Create(Self); // Yeni thread oluştur
end;

Project TrenYolKontrol.exe raised exception class EThread with message 'Cannot call Start on a running or suspended thread'. Hatasını alıyorum. Engelleyemedim...

Amacım şu procedürü thread içine almak

procedure TForm1.ayarurungetir;
var
 JSONObject,JSONObjectcat  : TJsonObject;
 drawArray,drawArraycat   : TJSONArray;
 JSONValue : TJSONValue;
 i,c           : integer;
 aList : TStringlist;
 basurl : string;
 bulunan : boolean;
begin
  try
    askmem.Lines.Clear;
    amsmem.Lines.Clear;
    adumem.Lines.Clear;
    basurl := 'https://api.trendyol.com/sapigw/suppliers/918400/products?page=0&size=300&approved=True';
    RESTClient1.BaseURL := basurl;
    RESTRequest1.Execute;
    jsonvaluec := Restresponse1.JSONValue;
    memo1.Lines.Text := jsonvaluec.ToString;
    finally
    end;
     JSONObject  := TJSONObject(TJSONObject.ParseJSONValue(memo1.Text));
     alist := TStringList.Create;
     try
      aList.Text := memo1.Text;
      JSONObject  := TJSONObject(TJSONObject.ParseJSONValue(aList.Text));
     finally
       FreeAndNil(aList);
     end;
     if JSONObject <> nil then
     try
       drawArray     := TJSONArray( JSONObject.FindValue('content') );
       for I := 0 to drawArray.Count-1 do
       begin
         with TJSONObject( drawArray.Items[i] ) do
         begin
           isim      := FindValue('title').Value;
           kategoriadi   := FindValue('categoryName').Value;
           barkod        := FindValue('barcode').Value;
           stokkodu  := FindValue('stockCode').Value;
           fiyat     := FindValue('salePrice').Value;
           miktar    := strtoint(FindValue('quantity').Value);
           drawArraycat  := TJSONArray( FindValue('attributes') );
           if (miktar = 0) and (fiyat='0') then askmem.Lines.Add(stokkodu) else if miktar = 0 then amsmem.Lines.Add(stokkodu)
           else if (kelimeara(stokkodu,asgmem)=False) and (kelimeara(stokkodu,askmem)=False) and (kelimeara(stokkodu,amsmem)=False) then adumem.Lines.Add(stokkodu);
           datayaekle(listview6);
         end;
       end;
     finally
       JSONObject.Free;
     end;
  memosirala(askmem);
  memosirala(amsmem);
  memosirala(adumem);
end;
Cevapla


Bu Konudaki Yorumlar
Thread Cannot call Start on a running or suspended thread hatası - Yazar: Jakarta2 - 29-11-2024, Saat: 17:55

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  IOS Deployment Info.Plist hatası mcuyan 9 469 07-04-2026, Saat: 09:30
Son Yorum: RAD Coder
  Çözüldü _ Delphi Community Edition SDK ayarları hatası cinarbil 1 484 12-03-2026, Saat: 10:25
Son Yorum: damert6
  Android Veriabanı hatası mkucuktepe@msn.com 1 528 10-05-2025, Saat: 23:13
Son Yorum: mcuyan
  OrangeUI kurulum hatası 41linea41 11 2.614 10-03-2025, Saat: 10:02
Son Yorum: RAD Coder
  Delphi 12 Android 14 Bu uygulama Android'in son sürümüyle uyumlu değil hatası batuakin 3 1.114 04-03-2025, Saat: 13:51
Son Yorum: RAD Coder



Konuyu Okuyanlar: 1 Ziyaretçi