procedure TMaterialThumbThread.Execute; var lvOrgBitmap, lvThumbBmp: TBitmap; i: Integer; begin lvOrgBitmap := TBitmap.Create; lvThumbBmp := TBitmap.Create; try lvThumbBmp.Height := 100; lvThumbBmp.Width := 100; lvThumbBmp.PixelFormat := pf24bit; for i := 0 to FFiles.Count - 1 do begin FEventFileName := trim(FFiles[i]); if FEventFileName <> '' then begin FEventStream := FStream; //self.Synchronize(Self.DoDownStream); Self.DoDownStream; if FStream.Size > 0 then begin FStream.Position := 0; lvOrgBitmap.LoadFromStream(FStream); lvThumbBmp.Canvas.FillRect(rect(0, 0, lvThumbBmp.Width, lvThumbBmp.Height)); GraphicToThumbBitmap(lvOrgBitmap, lvThumbBmp, 100, 100); FThumbGraphic := lvThumbBmp; //self.Synchronize(DoOuputThumbGraphic); DoOuputThumbGraphic; end; end; end; finally lvThumbBmp.Free; lvOrgBitmap.Free; end; end;
注释的是之前的代码, 把Synchronize去掉效果要好。 Synchronize是交给主线程去执行代码, 线程内部继续执行。用错了地方 |