//我想实现在线程连接ftp,如果连接失败,则退出程序,在我的代码中的TMYFTP.Execute过程中想实现
//该功能,但执行application.Terminate程序根本没有退出,我该怎样写
TMYFTP = class(TThread)
  private
    FTP: TIdFTP;
  protected
    procedure Execute; override;
  public
    constructor Create(FTP1: TIdFTP);
  end;procedure TMYFTP.Execute;{ 执行线程的方法 }
begin
  try
    FTP.Connect();
  except
    showmessage('连接失败!');//如果连接失败,该句可以成功提示!
    application.Terminate;  //但如果ftp连接失败,运行该句,系统根本不退出,我该怎样写?    
  end;
end;constructor TMYFTP.Create(FTP1: TIdFTP);
begin
  FTP := FTP1;
  inherited Create(true);
  FreeOnTerminate := TRUE;
end;procedure TForm1.Button1Click(Sender: TObject);
VAR
  I :INTEGER;
  FTPP: TMYFTP;
  IDFTP: Tidftp;
begin
  IDFTP := Tidftp.Create(NIL);IDFTP.Host :=  '10.16.0.1';IDFTP.Port := 21000;
  IDFTP.Password :='iocmanager'; 
  IDFTP.User := 'ioc';
  TRY
    FTPp := TMYFTP.Create(IDFTP);      // idftp1
    FTPp.Resume;
  EXCEPT
    showmessage('创建线程失败!!');
  END;
end;

解决方案 »

  1.   

    不要加 application ,直接terminate试试
      

  2.   

    在下面的问题中:http://community.csdn.net/Expert/topic/3624/3624822.xml?temp=.2727167按你的方法,不行啊,我真的很急!!!
      

  3.   

    不要尝试在非主线程里面退出程序,最好是在主线程里面等待其他线程完成后,再退出。
    例如:
    procedure TMYFTP.Execute;
    begin
      try
        FTP.Connect();
        ReturnValue := 0;
      except
        ReturnValue := -1;
      end;
    end;则在主线程可以这么做:
    procedure TForm1.Button1Click(Sender: TObject);
    VAR
      I :INTEGER;
      FTPP: TMYFTP;
      IDFTP: Tidftp;
    begin
      IDFTP := Tidftp.Create(NIL);IDFTP.Host :=  '10.16.0.1';IDFTP.Port := 21000;
      IDFTP.Password :='iocmanager'; 
      IDFTP.User := 'ioc';
      TRY
        FTPp := TMYFTP.Create(IDFTP);      // idftp1
        FTPp.Resume;
        if FTPp.waitFor = -1 then //Waitfor返回ReturnValue的值;当然Waitfor的时候,程序不能动了。整体构架需要改变。
          Close;//主窗体关闭,则程序自动结束。
              
      EXCEPT
        showmessage('创建线程失败!!');
      END;
    end;但是从你的架构来看,怪怪的。