Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Thread Cannot call Start on a running or suspended thread hatası
#2
(29-11-2024, Saat: 17:55)Jakarta2 Adlı Kullanıcıdan Alıntı:
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;

TProductThread.Create içinde Start değil, Resume metodunu çağırmalısınız.

Ayrıca belirtmek isterim ki; bir başka thread içinde iken (örneğimizde sizin TProductThread) ana thread içindeki görsel nesnelere erişim bir çok tahmin edilemez sıkıntılara neden olabilir. Ana thread'e bilgi göndermek, görsel kontrolleri bir şekilde etkilemek istiyorsanız eğer; TThread.Queue metodunu kullanmalısınız. Bu sitede o konu ile ilgili yazılmış bir kaç konu bulabilirsiniz.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla


Bu Konudaki Yorumlar
Cvp: Thread Cannot call Start on a running or suspended thread hatası - Yazar: Tuğrul HELVACI - 29-11-2024, Saat: 20:06

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