Bei folgender Procedure in einen Thread bekomme ich eine
AV, wenn ich den Thread mit Resume starte.
Führe ich ihn per Execute aus funktioniert alles.
Delphi-Quellcode:
type
TCalulateCheckSum = class(TThread)
private
{ Private-Deklarationen }
protected
sha1 : TlbSHA1;
SHA1Digest : TSHA1Digest;
procedure UpdateListItem1;
procedure UpdateListItem2;
procedure Execute; override;
public
ListItem : TListItem;
Checksum : string;
Filename : string;
end;
implementation
uses unit2;
procedure TCalulateCheckSum.Execute;
begin
{ Thread-Code hier einfügen }
Synchronize(UpdateListItem1);
sha1 := TLBSha1.Create(nil);
sha1.HashFile(Filename);
sha1.GetDigest(SHA1Digest);
checksum := BufferToHex(SHA1Digest, SizeOf(SHA1Digest));
sha1.Free;
Synchronize(UpdateListItem2);
end;
Aufruf :
Delphi-Quellcode:
procedure TForm2.ListViewCheck;
var t : integer;
CheckSum : TCalulateCheckSum;
begin
if Checksumrunning then exit;
for t := 0 to pred(ListView2.Items.Count) do begin
if ListView2.Items[t].SubItems[1] = 'to be hashed...' then begin
Checksumrunning := true;
Checksum := TCalulateCheckSum.Create(true);
Checksum.ListItem := ListView2.Items[t];
Checksum.Filename := ListView2.Items[t].Caption;
CheckSum.FreeOnTerminate := true;
Checksum.resume; // <<-- wenn ich hier execute schreibe funzt alles.
exit;
end;
end;
end;
Jemand ne Idee woran das liegen könnte ?