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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(05-10-2017, Saat: 17:22)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
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 Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. 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
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. 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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. 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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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 Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. 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.

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

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


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [Çözüldü] Fmx grid veya stringgrid hücre renklendirme CesuR 4 635 11-02-2019, Saat: 13:35
Son Yorum: CesuR
  Delphi AVD Manager kullanımı Bay_Y 18 2.676 11-12-2018, Saat: 16:00
Son Yorum: Bay_Y
Lightbulb InputQuery kullanımı Mr.Developer 4 633 13-11-2018, Saat: 13:46
Son Yorum: Mr.Developer
  scrollbox kullanımı arsl01 10 1.408 12-07-2018, Saat: 11:34
Son Yorum: Fesih ARSLAN
  Grid veya StringGrid Hücre Renklendirme burakb44 3 955 17-03-2018, Saat: 09:22
Son Yorum: burakb44



Konuyu Okuyanlar: 1 Ziyaretçi