当前位置:学Delphi网文档资料专题讲解多线程

多线程IdHttp下载网络上的文件并显示进度条

减小字体 增大字体 作者:学Delphi网  来源:本站整理  发布时间:2010-09-26 23:22:23

本文主要讲解的是在多线程里使用IdHttp下载文件并显示下载进度条,下载进度采取windows消息通知的方式来显示,将整个下载方法封装到了线程内部!

以下是线程关键代码:

unit uTestThread;

interface

uses
  Classes, Windows, SysUtils, IdHTTP, IdComponent, Math, Messages;

const
  WM_DownProgres = WM_USER + 1001;

type
  TTestThread = class(TThread)
  private
    FIDHttp: TIdHTTP;
    FMaxProgres: Int64;
    FURL: string;
    FSavePath: string;
    FHandle: THandle;
    { Private declarations }
    procedure DoExecute;
    procedure DoWorkBegin(ASender: TObject; AWorkMode: TWorkMode;
      AWorkCountMax: Int64);
    procedure DoWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
  protected
    procedure Execute; override;
  public
    constructor Create(AURL, ASavePath: string; AHandle: THandle);
    destructor Destroy; override;
  end;

implementation

{ TestThread }

constructor TTestThread.Create(AURL, ASavePath: string; AHandle: THandle);
begin
  FURL := AURL;
  FSavePath := ASavePath;
  FHandle := AHandle;
  FIDHttp := TIdHTTP.Create(nil);
  FIDHttp.OnWorkBegin := DoWorkBegin;
  FIDHttp.OnWork := DoWork;
  inherited Create(False); // 参数为False指线程创建后自动运行,为True则不自动运行
  FreeOnTerminate := True; // 执行完毕后自动释放
end;

destructor TTestThread.Destroy;
begin
  FIDHttp.Free;
  inherited;
end;

procedure TTestThread.DoExecute;
var
  FMs: TMemoryStream;
begin
  FMs := TMemoryStream.Create;
  try
    FIDHttp.Get(FURL, FMs);
    FMs.SaveToFile(FSavePath);
  finally
    FMs.Free;
  end;
end;

[1] [2]  下一页

Tags:多线程下载 IdHttp下载文件 IdHttp进度条

作者:学Delphi网
  • 好的评价 如果您觉得此文章好,就请您
      100%(1)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论