İmage nesnesine resim yükleme sırasında donma durumu

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
beklentili
Üye
Mesajlar: 86
Kayıt: 21 Ara 2013 09:05
İletişim:

İmage nesnesine resim yükleme sırasında donma durumu

Mesaj gönderen beklentili »

Merhaba, geliştirdiğim mobil uygulamada thread yöntemi ile datadan verileri çekip bu verilerle birlikte gelen adres ile web üzerindeki resmi telefonda belirlediğim klasöre indiriyorum. Buraya kadar hiç bir problem yok çok şükür.

Ancak

Kod: Tümünü seç

image1.Bitmap.LoadFromFile('www.abc.com/resim.png');
komutu ile de indirilen resimleri image nesnelerine yüklemeye çalıştığımda uygulama resmi yükleyene kadar tüm faaliyetleri askıya alıp donuyor. Resim yüklendikten sonra normal duruma dönüyor.
Resim sayısı birden fazla olacağı için bu durum istenmeyen bir durum olarak karşımıza çıkıyor. Şöyle ki 50 adet resmi yüklemeye çalıştığımda 20 saniyeye yakın bir donma söz konusudur.

Başta da belirttiğim gibi thread yapısını kullandığım için bu donmayı hiç beklemiyordum. Sizce bu durumu nasıl çözebilirim.
[/size]http://www.componentler.com | Türkçe component sitesi
Kullanıcı avatarı
barisatalay
Üye
Mesajlar: 398
Kayıt: 02 Nis 2013 05:43
İletişim:

Re: İmage nesnesine resim yükleme sırasında donma durumu

Mesaj gönderen barisatalay »

Aşağıdaki kod bloğunu doğru biçimde projenize ekleyin.

Kod: Tümünü seç

Kullanımı: AddLoading(Image1,procedure
                                              begin
                                                //Yapılacak işlem
                                              end;)

Kod: Tümünü seç

  TExpression = class
  public
    class function Func<T>(const CallBack: TFunc<T>): T;
    class procedure Proc(const CallBack: TProc);
  end;

implementation

class function TExpression.Func<T>(const CallBack: TFunc<T>): T;
begin
  if Assigned(CallBack) then
     Result := CallBack;
end;

class procedure TExpression.Proc(const CallBack: TProc);
begin
   if Assigned(CallBack) then
      CallBack;
end;

procedure AddLoading(OB:TFmxObject;Proc:TProc);
begin
  TExpression.Proc(
                  procedure
                  begin
                    TThread.CreateAnonymousThread(procedure
                    var
                      Rec: TRectangle;
                    begin
                      Rec := TRectangle.Create(OB);
                      with Rec do
                      begin
                        try
                          Parent := OB;
                          Align := TAlignLayout.Contents;
                          Sides := [];
                          Fill.Color := $FFF39912;

                          with TAniIndicator.Create( Rec ) do
                          begin
                            try
                              Parent := Rec;
                              Align := TAlignLayout.Center;
                              Visible := True;
                              Enabled := True;

                              Proc;
                            finally
                              Enabled := False;
                              Visible := False;
                              Free;
                            end;
                          end;
                        finally
                          Visible := False;
                          Free;
                        end;
                      end;
                    end).Start;
                  end);
end;
Cevapla