Hello,
I wrote a program from your source above, I post here.
unit ImageEnThread_Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
RunwithoutThread1: TMenuItem;
RunwithThread1: TMenuItem;
withoutThread1: TMenuItem;
procedure RunWithoutThread1Click(Sender: TObject);
procedure RunWithThread1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
procedure LoadImagesWithoutThread;
procedure LoadImagesWithThread;
procedure GetImageList;
end;
var
Form1: TForm1;
implementation
uses
ImageEnView,
System.Threading,
System.IOUtils,
System.Types,
IEMView;
{$R *.dfm}
var
Vec : TStringDynArray;
ImageEnMView1 : TImageEnMView;
procedure TForm1.FormCreate(Sender: TObject);
begin
GetImageList;
end;
procedure TForm1.GetImageList;
begin
Vec := TDirectory.GetFiles (path);
end;
{ Without thread }
procedure TForm1.LoadImagesWithoutThread;
var
i : Cardinal;
View : TImageEnView;
begin
for i := 0 to Length(Vec) - 1 do
begin
View := TImageEnView.Create(nil);
try
View.IO.LoadFromFile(Vec[i]);
finally
View.Free;
end;
end;
end;
{ With thread }
procedure TForm1.LoadImagesWithThread;
var
i : Cardinal;
View : TImageEnView;
begin
TParallel.For (0, Length(Vec) - 1,
procedure (i: integer)
var View: TImageEnView;
begin
View := TImageEnView.Create(nil);
try
View.IO.LoadFromFile(Vec[i]);
finally
View.Free;
end;
end);
end;
procedure TForm1.RunWithoutThread1Click(Sender: TObject);
begin
LoadImagesWithoutThread;
end;
procedure TForm1.RunWithThread1Click(Sender: TObject);
begin
LoadImagesWithThread;
end;
end.
I can reproduce the speed of loading pngs 10 times faster than without threads, but the images are not shown. What is wrong?
Sincerely Peter