神啊,救救我吧。中断下载后程序出错!!(100分)

  • 主题发起人 主题发起人 qwerpoiu10
  • 开始时间 开始时间
Q

qwerpoiu10

Unregistered / Unconfirmed
GUEST, unregistred user!
以前我也问过这个问题,但一直没有得到很好的解决。
动态往CheckListBox里添加了一些下载任务,选择需要下载的任务后,按button1开始下载,按button2停止下载。
这是我程序中下载部分的代码:
stop: boolean //全局变量
//button1的事件:
stop:=false;
button2.enable:=true;
for j:= 1 to MyStrList.countdo
try
Application.ProcessMessages;
//以前有些高手们告诉我在这个for循环里加上这句就可以中断后一个任务的下载,但不能中断当前的下载,并且速度不太明显。
if stop then
break;
tmpStream:=TFileStream.Create(DirEdit.Text+'/'+GetFileName(MyStrList.Strings[j-1]),fmCreate);
FNLabel.Caption :=GetFileName(MyStrList.Strings[j-1]);
FNLabel.Update;
idHttp2.Get(MyStrList.Strings[j-1],tmpStream);
finally
tmpStream.Free;
end;

//button2的事件
stop:=true;
我试了以后,当按下button1后,程序是很慢,无法很好的点击button2,但还是可以点它,点击button2后,
可以中断后一个任务的下载,但现在的问题是,中断下载后,程序就出错了,怎么解决呢?
 
你这个根本起不到中断下载的作用,只是在下载完当前的文件后,不下载后面的。
if stop then

begin
tmpStream.Free;
break;
end;
 
TO jsxjd,当初他们告诉我时,也是这么说的,说无法中断当前下载,只能中断后一个下载。
你的这段代码是什么意思?我现在代码改成这样了,对吗?
for j:= 1 to MyStrList.countdo
try
Application.ProcessMessages;
if stop then
begin
tmpStream.Free;
break;
end;
tmpStream:=TFileStream.Create(DirEdit.Text+'/'+GetFileName(MyStrList.Strings[j-1]),fmCreate);
FNLabel.Caption :=GetFileName(MyStrList.Strings[j-1]);
FNLabel.Update;
idHttp2.Get(MyStrList.Strings[j-1],tmpStream);
finally
tmpStream.Free;
end;

可是中断后程序还是出错啊?
 
求各位了,告诉我啊!!
 
什么错误?
 
错误信息:
Project Project1.exe raised exception class EAccessViolation with message 'Access violation
at address 00006c66.Write of address 0042ce24'.Process stopped.Use Step or Run to continue.
 
上面那是在delphi里调试运行时出错的信息。
以下是直接在电脑里运行那个EXE文件,然后中断下载后出错的信息:
Access violation at address 00000013.Write of address 8D4944B0.
怎么办?
请各位帮忙啊!分不够我再加啊!
 
为什么每次总是没人理我啊!!!
太伤心了!
 
try的位置不对。因为tmpStream已经为nil了,再free会出错。
应下移:
j:= 1 to MyStrList.countdo

begin
Application.ProcessMessages;
if stop then
break;
try
tmpStream:=TFileStream.Create(DirEdit.Text+'/'+GetFileName(MyStrList.Strings[j-1]),fmCreate);
FNLabel.Caption :=GetFileName(MyStrList.Strings[j-1]);
FNLabel.Update;
idHttp2.Get(MyStrList.Strings[j-1],tmpStream);
finally
tmpStream.Free;
end;
end;

你试试看,应该不会出错了。
 
接受答案了.
 
后退
顶部