Thread opdatering af label
HejMig og en af min venner har sat os for at rode med thread
Det går sådan set også meget godt, vi har rodet med en funktion til at kopierer filer med.
Den har vi så lagt i en thread, men vi er løbet ind i et problem
Vi har lavet en Gauge som viser progress samt et label som viser rast tid på vors main form
problem er at vi får fejl(forskellige fejl) når vi køre vore funktion og den skal opdatere vores label
Det går fint noget af vejen men så fejler den.
Her er koden til vores thread
unit Unit2;
interface
uses
Windows, SysUtils, Classes, Gauges, StdCtrls, ExtCtrls;
type
Ttest = class(TThread)
Source, Destination: string;
Gauge: TGauge;
Timelabel: TLabel;
private
{ Private declarations }
Prog: Integer; //progress for gauge
TimeLeft: String; //time left
procedure UpdateProgress;
protected
procedure Execute; override;
end;
implementation
{ test }
procedure Ttest.Execute;
var
FromF, ToF: file of byte;
Buffer: array[0..4096] of char;
NumRead: integer;
FileLength: longint;
t1, t2: DWORD;
maxi: integer;
begin
AssignFile(FromF, Source);
reset(FromF);
AssignFile(ToF, Destination);
rewrite(ToF);
FileLength := FileSize(FromF);
with Gauge do
begin
MinValue := 0;
MaxValue := FileLength;
t1 := GetTickCount;
MaxI := MaxValue div 4096;
while FileLength > 0 do
begin
BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
FileLength := FileLength - NumRead;
BlockWrite(ToF, Buffer[0], NumRead);
t2 := GetTickCount;
MinValue := MinValue + 1;
TimeLeft := FormatFloat('00.00', ((t2 - t1) / MinValue * maxi - t2 + t1) / 100);
Synchronize(UpdateProgress);
Prog := Prog + NumRead;
end;
CloseFile(FromF);
CloseFile(ToF);
Gauge.Progress := 0;
end;
end;
procedure Ttest.UpdateProgress;
begin
Gauge.Progress := Prog;
Timelabel.Caption := TimeLeft;
end;
end.
Vi kalder den på denne måde
test := Ttest.Create(true);
with test do
begin
Source := 'c:\data';
Destination := 'c:\data2';
Gauge := Gauge1;
Timelabel := Label1;
Resume;
Lige så snart at vi slår Timelabel.Caption := TimeLeft; fra virker det uden problemer
Håbe der er nogen der kan hjælpe og fortælle os hvad der går galt da vi gerne vil vide mere
/MB