我实现了一个TTask来执行多个上传。我仍然必须在创建的任务中实现IdHttp的OnWorkBegin,OnWork,OnWorkEnd方法,但我不知道该怎么做。
var TASK: ITask;
begin
TASK := TTask.Create(
procedure
var
IdSSL: TIdSSLIOHandlerSocketOpenSSL;
lParam : TIdMultipartFormDataStream;
UrlAPI: string;
res: string;
lHTTP: TIdHTTP;
begin
UrlAPI := 'https://..........';
lHTTP := TIdHTTP.Create(nil);
//I want to handle the OnWork methods here but I don't know where to declare them with this code structure that I would like to keep.
//lhttp.OnWorkBegin:= IdHTTPOnWorkBegin;
//lhttp.OnWork:=IdHTTP1Work;
//lhttp.OnWorkEnd:=IdHTTPOnWorkEnd;
TThread.Synchronize(nil,
procedure
begin
Memo1.Lines.Add('Task Running...');
end
);
lHTTP.ReadTimeout := 30000;
lHTTP.HandleRedirects := false;
lParam := TIdMultipartFormDataStream.Create;
lParam.AddFormField('param1', code1);
lParam.AddFormField('param2', code2);
lParam.AddFile('source', TheFile);
lParam.Position := 0;
try
res := lHTTP.Post(UrlAPI, lparam);
memo1.Lines.Add(risposta);
Finally
lHTTP.Free;
end;
TThread.Synchronize(nil,
procedure
begin
Memo1.Lines.Add('SEND file '+TheFile);
end
);
end
);
TASK.Start();
我在哪里写方法的声明,以便它们可以包括IHTTP的声明?
答案 0 :(得分:1)
与您在Delphi中始终执行的方法相同。
type
TForm1 = class(TForm)
procedure IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
System.Threading;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
Task: ITask;
begin
Task := TTask.Create(
procedure
var
IdHttp1: TIdHttp;
begin
IdHttp1 := TidHttp.Create(Self);
IdHttp1.OnWork := Form1.IdHTTP1Work;
end
);
Task.Start;
end;
procedure TForm1.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
var
IdHttp: TIdHttp;
begin
IdHttp := ASender as TIdHttp;
end;