我在做一个有关下载的东西时,如何才能取消,暂停与继续下载线程?type
TMyDownLoad=class(TThread)
public
sName:string;
procedure Execute;override;
procedure Download;
procedure MsgWrong;
procedure MsgSuccess;
end;procedure TMyDownLoad.Download;
var
UnitName,PathName:String;
MyStream:TMemoryStream;
IDHTTP: TIDHttp;
begin
sName:=fmMain.eName.Text;
IDHTTP:= TIDHTTP.Create(nil);
MyStream:=TMemoryStream.Create;
try
IdHTTP.Get(fmMain.eUrl.Text,MyStream);
except
Synchronize(MsgWrong);
MyStream.Free;
Exit;
end;
Synchronize(MsgSuccess);
MyStream.SaveToFile(fmMain.ePath.Text+fmMain.eName.Text);
MyStream.Free;
end;procedure TMyDownLoad.Execute;
begin
inherited;
Download;
end;procedure TMyDownload.MsgWrong;
begin
showmessage('下载出错!');
end;procedure TMyDownload.MsgSuccess;
begin
showmessage(sName+'下载完成!');
end;procedure TfmMain.btnDownloadClick(Sender: TObject);
begin
TMyDownLoad.Create(false);
end;
TMyDownLoad=class(TThread)
public
sName:string;
procedure Execute;override;
procedure Download;
procedure MsgWrong;
procedure MsgSuccess;
end;procedure TMyDownLoad.Download;
var
UnitName,PathName:String;
MyStream:TMemoryStream;
IDHTTP: TIDHttp;
begin
sName:=fmMain.eName.Text;
IDHTTP:= TIDHTTP.Create(nil);
MyStream:=TMemoryStream.Create;
try
IdHTTP.Get(fmMain.eUrl.Text,MyStream);
except
Synchronize(MsgWrong);
MyStream.Free;
Exit;
end;
Synchronize(MsgSuccess);
MyStream.SaveToFile(fmMain.ePath.Text+fmMain.eName.Text);
MyStream.Free;
end;procedure TMyDownLoad.Execute;
begin
inherited;
Download;
end;procedure TMyDownload.MsgWrong;
begin
showmessage('下载出错!');
end;procedure TMyDownload.MsgSuccess;
begin
showmessage(sName+'下载完成!');
end;procedure TfmMain.btnDownloadClick(Sender: TObject);
begin
TMyDownLoad.Create(false);
end;
用全局的命名变量,如
var
T1: TMyDownLoad;T1 := TMyDownLoad.Create(false);T1.Resume;//恢复
T1.Suspend;//暂停
T1.Free;//销毁
当T[2]下载完成后,并且T[2].Free;
能否这样赋值:
T[2]:=T[3];
当T[2]下载完成后,并且T[2].Free;
执行这样的操作:T[2]:=T[3];
就要报错
我想的是用链表解决,有没有更好的办法?
procedure TfmMain.btndeleteClick(Sender: TObject);
var
iCX1:integer;
begin
if (fmMain.listTask.ItemIndex>-1)
then begin
fmMain.bStop:=true;
fmMain.aTasks[fmMain.listTask.ItemIndex+1]^.IDHttp.Free;
fmMain.aTasks[fmMain.listTask.ItemIndex+1]^.Free;
//dispose(fmMain.aTasks[fmMain.listTask.ItemIndex+1]);
for iCX1:=fmMain.listTask.ItemIndex+2 to fmMain.iTasks do
begin
fmMain.aTasks[iCX1-1]:=fmMain.aTasks[iCX1];
dec(fmMain.aTasks[iCX1-1].iIndex);
end;
fmMain.aTasks[fmMain.iTasks]:=nil;
dec(fmMain.iTasks);
end
else showmessage('未选择任务!');
end;
可以中断,但是要报错,why?