

ich schreibe derzeit ein Programm, das dem User ein paar Dateien aus einem FPT-Server herunterladen soll, damit mein Programm aber nicht einfriert ("Keine Rückmeldung") wollte ich das ganze in einen Zweiten Thread verpacken, das funzt auch bei der ersten (manchmal auch bei der zweiten) Datei ganz gut, dann löst mein Programm aber eine Exeption aus, mit der ich leider nicht umzugehen weiß

Ebenfalls möchte ich wissen, ob es dafür auch eine alternative/einfachere Methode gibt

Die Exeption-Ausgabe:
Code: Alles auswählen
Projekt Minecraft_Multilauncher_Setup hat
Ecxeption-Klasse >>External: SIGSEGV<< ausgelöst.
Bei Adresse 73726573
Thread-Execute-Code und von ihm genutzte prozeduren:
Code: Alles auswählen
procedure TForm1.ShowDLStat(LCapt: String);
begin
Form1.Memo_step.Lines.Add(LCapt)
end;
procedure TForm1.setDLCaption(LCapt: String);
begin
Form1.StaticText_download.caption:=LCapt;
end;
procedure TForm1.setProgressBar(LStep: Integer);
begin
Form1.ProgressBar_download.position:=LStep;
end;
procedure DownloadThread.Execute;
var
i: Integer;
MaxCurSteps: Integer;
Step: Integer;
CurStep: Integer;
captions: String;
failes: Boolean;
str: String;
begin
for i:=0 to (MaxCurSteps-1) do
begin
Form1.ShowDLStat('');
if (i = 4) or (i = 6) then
begin
Form1.ShowDLStat('Downloading '+recs[i]+' || This will take a while! ||');
end
else
begin
Form1.ShowDLStat('Downloading '+recs[i]);
end;
CurStep:=i+1;
captions:= 'Installiere... : Schritt '+IntToStr(Step)+'/2 ('+IntToStr(CurStep)+'/'+IntToStr(MaxCurSteps)+')';
Form1.setDLCaption(captions);
Form1.setProgressBar(CurStep);
FTPDownload('source/'+recs[i],InstalDir+'\'+dest[i]);
Form1.ShowDLStat('Extracting '+dest[i]);
// Sleep(50);
captions:= 'Installiere... : Schritt '+IntToStr(Step)+'/2 ('+IntToStr(CurStep)+'/'+IntToStr(MaxCurSteps)+')';
end;
end;
Code: Alles auswählen
procedure TForm1.Button_performInstalClick(Sender: TObject);
{ dirs: TStringList;
recs: TStringList;
dest: TStringList; }
var
MyDownloadThread : DownloadThread;
MaxCurSteps: Integer;
Step: Integer;
CurStep: Integer;
captions: String;
failes: Boolean;
str: String;
i: Integer;
File1,File2,File3: TextFile;
//----------------------------//
begin
Button_prev.Enabled:=false;
application.ProcessMessages;
Screen.Cursor:=crHourGlass;
Sleep(500);
dirs:= TStringList.create;
recs:= TStringList.create;
dest:= TStringList.create;
Memo_step.Lines.Add('Reading relevant Files...');
Sleep(800);
// Files auslesen
recs.LoadFromFile('resource.txt');
recs.TextLineBreakStyle:=tlbsLF;
dirs.LoadFromFile('dirs.txt');
dirs.TextLineBreakStyle:=tlbsLF;
dest.LoadFromFile('destination.txt');
dest.TextLineBreakStyle:=tlbsLF;
StaticText_download.visible:=true;
MaxCurSteps:= dirs.Count;
ProgressBar_download.Max:=MaxCurSteps-1;
Step:=1;
CreateDir(InstalDir);
for i:=0 to (dirs.Count-1) do
begin
CurStep:=i+1;
Memo_step.Lines.Add('Creating Directory: '+dirs[i]);
CreateDir(InstalDir+'\'+dirs[i]);
Sleep(400);
captions:= 'Installiere... : Schritt '+IntToStr(Step)+'/2 ('+IntToStr(CurStep)+'/'+IntToStr(MaxCurSteps)+')';
StaticText_download.caption:=captions;
ProgressBar_download.position:=CurStep;
end;
Sleep(500);
MaxCurSteps:= dest.Count;
Step:=2;
ProgressBar_download.Max:=MaxCurSteps;
if FTPLogin(FTPUser,FTPPass,'mark332.bplaced.net','21') = true then
begin
MyDownloadThread := DownloadThread.Create(false);
FTPLogout;
failes:=false;
end
else
begin
ShowMessage('Login Error occured! Please contact mark332/Life4YourGames !');
failes:=true;
end;
Screen.Cursor:=crDefault;
if (failes=true) then
begin
ShowMessage('Es ist ein Fehler aufgetreten, setze Installation zurück!');
Sleep(500);
DeleteDirectory(InstalDir, true);
rmDir(InstalDir);
if FileExists('resource.txt') then
begin
DeleteFile('resource.txt')
end;
if FileExists('destination.txt') then
begin
DeleteFile('destination.txt')
end;
if FileExists('dirs.txt') then
begin
DeleteFile('dirs.txt')
end;
Application.Terminate;
end;
if not (failes=true) then
begin
ShowMessage('Erfolgreich installiert!');
Button_prev.Enabled:=false;
x:=x+1;
LockExit:=false;
end;
end;
Wenn ihr nicht durchblickt, weil es unordentlich ist, sagt bescheid

MfG mark332