我有一个线程定义THttpThread
用于下载文件。如果关闭模态窗体或按下取消按钮,我想停止下载。
在下面的示例中,我得到了访问冲突,可能是因为我重用该线程的方式。
procedure Tform_update.button_downloadClick(Sender: TObject);
var
HttpThread: THttpThread;
begin
//download
if button_download.Tag = 0 then
begin
HttpThread:= THttpThread.Create(True);
//...
HttpThread.Start;
end
//cancel download
else
begin
HttpThread.StopDownload:= True;
end;
end;
我从How stop (cancel) a download using TIdHTTP和其他许多人那里播下答案,但我仍然不知道如何更新正在运行的线程的属性。
答案 0 :(得分:1)
我将使用用户评论中的提示给出答案。
访问冲突来自于取消期间未分配HttpThread
的事实。必须在其形式下定义HttpThread: THttpThread
的原因如下:
Tform_update = class(TForm)
//...
private
HttpThread: THttpThread;
然后代码应该是:
procedure Tform_update.button_downloadClick(Sender: TObject);
begin
//download
if button_download.Tag = 0 then
begin
HttpThread:= THttpThread.Create(True);
//...
HttpThread.Start
end
//cancel download
else
begin
if Assigned(HttpThread) then HttpThread.StopDownload:= True;
end;
end;
表单关闭相同
procedure Tform_update.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Assigned(HttpThread) then HttpThread.StopDownload:= True;
end;
正如一些用户在一些评论中所要求的那样,不需要线程代码。