Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Thread kullanmadan veya IdThreadComponent ile AniIndicator kullanımı hk.
#11
Tuğrul hocam teşekkür ederim cevaplarınız için.

Yazdıklarınız dahil her şeyi denedim, sonuç olarak işlemlerin hepsinin doğru olduğunu teyit ettim. Sadece ios tarafında bu sorunu veriyor olması da buna işaret ediyor. Eski bir ios telefon bulup onda test edeceğim eğer yine sorun düzelmezse delphi son sürümünü kurup sorun delphi'den mi anlayacağım.

Sonucu yazacağım.

İyi çalışmalar.
Cevapla
#12
(05-10-2017, Saat: 17:22)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Malum bu aralar formumuzda alternatif çözümler revaçta, bu vesile ile nesne kullanmadan, örnek bir kod paylaşımı yapayım.
TThread.CreateAnonymousThread(
 procedure ()
 begin
   TThread.Synchronize (nil,
     procedure ()
     begin
       AniIndicator1.Visible := True;
       AniIndicator1.Enabled := True;
     end
   );
   try
     //işlemleriniz;
   finally
   //  TThread.Synchronize (nil,
   //    procedure ()
   //    begin
         AniIndicator1.Enabled := False;
         AniIndicator1.Visible := False;
   //    end);
   end;
 end
).Start;

finally bölümündeki kodları opsiyonel yaptım. Smile 
Sebebi ise Android uygulamalarda AnonymousThread işlemi tamamlandıktan (örneğin, ListView dolduruluyor) hemen sonra AniIndicator'ün gizlenmesi, az da olsa zaman alıyor (1-2 sn.). Finally bölümündeki  Synchronize'ı kapatınca, thread bitimine müteakip AniIndicator gizleniyor.


Fesih Hocam;
ios tarafında kodu yazdığınız butona 3-4 defa bastığınızda sizde ekteki hatayı alıyor musunuz?


Ek Dosyalar Resimler
   
Cevapla
#13
(07-10-2017, Saat: 18:00)pro_imaj Adlı Kullanıcıdan Alıntı:
(05-10-2017, Saat: 17:22)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Malum bu aralar formumuzda alternatif çözümler revaçta, bu vesile ile nesne kullanmadan, örnek bir kod paylaşımı yapayım.
TThread.CreateAnonymousThread(
 procedure ()
 begin
   TThread.Synchronize (nil,
     procedure ()
     begin
       AniIndicator1.Visible := True;
       AniIndicator1.Enabled := True;
     end
   );
   try
     //işlemleriniz;
   finally
   //  TThread.Synchronize (nil,
   //    procedure ()
   //    begin
         AniIndicator1.Enabled := False;
         AniIndicator1.Visible := False;
   //    end);
   end;
 end
).Start;

finally bölümündeki kodları opsiyonel yaptım. Smile 
Sebebi ise Android uygulamalarda AnonymousThread işlemi tamamlandıktan (örneğin, ListView dolduruluyor) hemen sonra AniIndicator'ün gizlenmesi, az da olsa zaman alıyor (1-2 sn.). Finally bölümündeki  Synchronize'ı kapatınca, thread bitimine müteakip AniIndicator gizleniyor.


Fesih Hocam;
ios tarafında kodu yazdığınız butona 3-4 defa bastığınızda sizde ekteki hatayı alıyor musunuz?

Bu metodu bir çok işlemde kullanıyorum. Belirttiğiniz şekilde bir hata ile karşılaşmadım.
İlave kod yazdıysanız, ilgili methodu debug ile kontrol edin.
Cevapla
#14
Merhaba;

Konuyla ilgili sorunun kaynağını buldum, çoğu kişinin işine yarayacak bir bilgi olabilir;

Fesih hocam sizin mantığın araştırınca marco cantu'nunda aynı yöntemle kullandığını gördüm bundan dolayı bu şekilde ilerlemeye emin oldum.

Sorunla sonradan karşılacaklara direk anlaşılır olması açısından; Fesih hocamında yazdığı gibi basitçe kodun kullanımı;
  ServerCon();

 TThread.CreateAnonymousThread(
   procedure()
   begin
     TThread.Synchronize(nil,
       procedure()
       begin
         AniIndicator1.Visible := True;
         AniIndicator1.Enabled := True;
         frmAna.AniIndicator1.BringToFront;
       end);
     try
       // işlemleriniz+
   
       // işlemleriniz-
     finally
       TThread.Synchronize(nil,
         procedure()
         begin
           AniIndicator1.Enabled := False;
           AniIndicator1.Visible := False;
           frmAna.AniIndicator1.SendToBack;
         end);
     end;
   end).Start;


procedure TfrmA.ServerCon();
begin
 try
   if conServer.Connected = False then
     conServer.Connected := true;
 Except
   showmessage('Check Your Internet Connection');
   // İnternet Bağlantınızı Kontrol Edin.
   Exit;
 end;
end;



Alıntı:Project Projectl.exe raised exception class EOLEDBError .A.ith message 'OLE DB error occurred. Code 80040 1F0h. Colnitiabze has not been called.'. 

Yukarıdaki koddaki nüans server bağlantısını Connection nesnesini Thread içinde yapmamaktan geçiyor aksi durumda yukarıdaki hata ile karşılaşırsınız.

Hatayı araştırdığımda;
CoInitialize ve Execute yöntemleriyle çağırmanın gerekliliğine vurgu yapılıyor. Ben şimdilik bu kolay yöntemle işi çözmüş oldum.

Bundan dolayı Connection işlemini (ServerCon()) Thread başlamadan yapıyorum.

Teşekkürler.
Cevapla
#15
Buradaki makaleler'de işe yarayabilir.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#16
(13-10-2017, Saat: 10:23)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Buradaki makaleler'de işe yarayabilir.

Tuğrul hocam; Sorunun çözümüyle ilgili sitenizden fazlaca faydalandım Smile , ayrıca teşekkür ederim.
Cevapla
#17
(12-10-2017, Saat: 22:42)pro_imaj Adlı Kullanıcıdan Alıntı: Merhaba;

Konuyla ilgili sorunun kaynağını buldum, çoğu kişinin işine yarayacak bir bilgi olabilir;

Fesih hocam sizin mantığın araştırınca marco cantu'nunda aynı yöntemle kullandığını gördüm bundan dolayı bu şekilde ilerlemeye emin oldum.

Sorunla sonradan karşılacaklara direk anlaşılır olması açısından; Fesih hocamında yazdığı gibi basitçe kodun kullanımı;
  ServerCon();

 TThread.CreateAnonymousThread(
   procedure()
   begin
     TThread.Synchronize(nil,
       procedure()
       begin
         AniIndicator1.Visible := True;
         AniIndicator1.Enabled := True;
         frmAna.AniIndicator1.BringToFront;
       end);
     try
       // işlemleriniz+
   
       // işlemleriniz-
     finally
       TThread.Synchronize(nil,
         procedure()
         begin
           AniIndicator1.Enabled := False;
           AniIndicator1.Visible := False;
           frmAna.AniIndicator1.SendToBack;
         end);
     end;
   end).Start;


procedure TfrmA.ServerCon();
begin
 try
   if conServer.Connected = False then
     conServer.Connected := true;
 Except
   showmessage('Check Your Internet Connection');
   // İnternet Bağlantınızı Kontrol Edin.
   Exit;
 end;
end;



Alıntı:Project Projectl.exe raised exception class EOLEDBError .A.ith message 'OLE DB error occurred. Code 80040 1F0h. Colnitiabze has not been called.'. 

Yukarıdaki koddaki nüans server bağlantısını Connection nesnesini Thread içinde yapmamaktan geçiyor aksi durumda yukarıdaki hata ile karşılaşırsınız.

Hatayı araştırdığımda;
CoInitialize ve Execute yöntemleriyle çağırmanın gerekliliğine vurgu yapılıyor. Ben şimdilik bu kolay yöntemle işi çözmüş oldum.

Bundan dolayı Connection işlemini (ServerCon()) Thread başlamadan yapıyorum.

Teşekkürler.

Thread içerisinde yukarıdaki // işlemleriniz+ kod bloğundaki alanda Query'ye parametre gönderip Active yapıyorum fakat bu esnada AniIndicator1 nesnesi donuyor bu sorunu nasıl çözebilirim.

Teşekkürler.
Cevapla
#18
Information 
Merhaba,

Konu ile ilgili bazı tecrübelerimi aktarmak isterim. Özellikle veritabansal işlemler yapacaksanız ve multithread yöntem tercih ettiyseniz connection nesnenizi muhakkak thread içerisinde create edin. Queryleriniz ise Create ettiğiniz bu connection üzerinden sağlansın. Kısacası mümkün mertebe backgroundda yapacağınız işlemler kendi içerisinde çözülmeli. Formdaki nesneler ile bağlantısı azaltılmalı. Querylerinizi ve connection nesnenizi thread içerisinde create edip kullanmanız gelecekte daha karmaşık aşamalarda değişik problemler almanızın önüne geçecektir.

Saygılarımla

Ek olarak TAniIndicator componentinin bazı sıkıntılarından dolayı FGX componenti kullanıyorum. ProgressDialog ve ActivityDialog componentleri mükemmel iş görüyor. Açık kaynak kodlu componentin adresi aşağıdadır. Örnek projeleri inceleyip test edebilirsiniz.

https://github.com/ms301/FGX-FireMonkey

post-1-0-71694200-1397661481_thumb.png

post-1-0-09507800-1397663242_thumb.png
post-1-0-28248200-1397663242.png
post-1-0-67382700-1397663663_thumb.png
Cevapla
#19
Bilgilendirme için herkese çok teşekkürler , Çok güzel bir bilgilendirme olmuş Thread ile ilgili.
Cevapla
#20
(30-05-2019, Saat: 17:32)caoster Adlı Kullanıcıdan Alıntı: Merhaba,

Konu ile ilgili bazı tecrübelerimi aktarmak isterim. Özellikle veritabansal işlemler yapacaksanız ve multithread yöntem tercih ettiyseniz connection nesnenizi muhakkak thread içerisinde create edin. Queryleriniz ise Create ettiğiniz bu connection üzerinden sağlansın. Kısacası mümkün mertebe backgroundda yapacağınız işlemler kendi içerisinde çözülmeli. Formdaki nesneler ile bağlantısı azaltılmalı. Querylerinizi ve connection nesnenizi thread içerisinde create edip kullanmanız gelecekte daha karmaşık aşamalarda değişik problemler almanızın önüne geçecektir.

Saygılarımla

Ek olarak TAniIndicator componentinin bazı sıkıntılarından dolayı FGX componenti kullanıyorum. ProgressDialog ve ActivityDialog componentleri mükemmel iş görüyor. Açık kaynak kodlu componentin adresi aşağıdadır. Örnek projeleri inceleyip test edebilirsiniz.

https://github.com/ms301/FGX-FireMonkey

post-1-0-71694200-1397661481_thumb.png

post-1-0-09507800-1397663242_thumb.png
post-1-0-28248200-1397663242.png
post-1-0-67382700-1397663663_thumb.png

Merhaba
delphi 10.3.3 te çalıştıramadım.  kurulumda sorun yok
demosunu çalıştırıyorum bu çıktıları alamıyorum.
buna benze free component varmıdır başka.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Listview Drag drop Kullanımı [ÇÖZÜLDÜ.] codder71 10 1.494 28-06-2023, Saat: 18:03
Son Yorum: codder71
  IOS galeriden resim veya video seçme hakkında Mr.X 6 1.154 11-05-2023, Saat: 06:54
Son Yorum: emozgun
  Datasnap Kullanımı Hk. sadoal351 1 538 11-01-2023, Saat: 12:45
Son Yorum: hi_selamlar
  Binding ile SQL ve TMemo kullanımı dervis 1 545 30-10-2022, Saat: 22:32
Son Yorum: mcuyan
  REST image kullanımı codder71 12 3.089 19-04-2022, Saat: 22:41
Son Yorum: codder71



Konuyu Okuyanlar: 1 Ziyaretçi