Delphi 10 Indy IdHttp, как реализовать OnWork в Задаче - PullRequest
1 голос
/ 06 апреля 2019

Я реализовал TTask для выполнения нескольких загрузок. Мне все еще нужно реализовать методы OnWorkBegin, OnWork, OnWorkEnd IdHttp в созданной мной задаче, но я не знаю, как.

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?

1 Ответ

1 голос
/ 06 апреля 2019

Так же, как вы всегда делаете это в 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;
...