我在From里面放一个idHttp控件
然后这样使用得到网页内容:
  FResult := IdHTTP1.Get(url?Username=XXX&Passwd=ZZZ);
  if Pos('登陆失败!', FResult) > 0 then
  begin
    //密码错误,中止
    Exit;
  end;
  FResult := IdHTTP1.Get(url); //这里必须登录之后才能得到我要的内容这样没有任何问题,能够得到正确的结果。
但现在我想把这个做到线程里面去,所以定义了一个线程:
  THtmlMsg = class(TThread)
  private
    FResult : string;
    IdHTTP: TIdHTTP;
  protected
    procedure Execute; override;
  public
    constructor Create;
    destructor Destroy; override;
  end;然后
constructor THtmlMsg.Create;
begin
  inherited Create(False);
  IdHTTP := TIdHTTP.Create(nil);
  IdHTTP.HandleRedirects := True;
end;destructor THtmlMsg.Destroy;
begin
  FreeAndNil(IdHTTP);
  inherited;
end;但在Execute方法里使用就不对了:  FResult := IdHTTP1.Get(url?Username=XXX&Passwd=ZZZ);
  if Pos('登陆失败!', FResult) > 0 then
  begin
    //密码错误,中止
    Exit;
  end;
  FResult := IdHTTP1.Get(url); //这里还是显示没有登录。
请教各位大侠这是怎么回事,如何解决呢?

解决方案 »

  1.   

    没有看出来明显问题。怀疑是Create的错误导致。把inherited Create(False);  移到后面,因为这个参数create后,就立即执行线程代码,idhttp还没有进行初始化导致的。constructor THtmlMsg.Create;
    begin
      IdHTTP := TIdHTTP.Create(nil);
      IdHTTP.HandleRedirects := True;
      inherited Create(False); 
      //或者参数用True 加上下面的唤醒
      //Self.Resume
      FreeOnTerminate := True; //加上。
    end;
      

  2.   

    建议不要使用INDY的控件,经常会出错.
    使用HTTPCLI那个控件吧,用在线程里也比较稳定.
      

  3.   

    to Dlwxn(Dlwxn) 改了之后故障依旧,一样的现象