想实现当点击按钮时,关闭线程生成的窗体,并结束线程
procedure mythread.onclick;
begin
  Ftimer.Enabled:=false;
  FForm.Close;
  FForm.Free;//这一句加上就会出错,该部该要这一句呢?
  terminate;
end;
 
procedure mythread.Execute;
begin
  FreeOnTerminate := true;
  Fcount := 6;
  FForm :=TForm.Create(nil);
  FForm.Width :=400;
  FForm.Height :=300;
  FForm.BorderStyle := bsDialog;
  FForm.Position := poScreenCenter;
  FForm.OnClose := unload;
  FBtok := TButton.Create(FForm);
  FBtok.Parent := FForm;
  FBtok.Width :=100;
  FBtok.Left :=20;
  FBtok.Height :=200;
  FBtok.Top :=50 ; 
  FBtok.OnClick := onclick;
 
  FForm.ShowModal;
  FForm.Free;
end;

解决方案 »

  1.   

    出错的那句话不该要的,terminate;这句也不该要
    2句话都去掉后,应该是正确的。
      

  2.   

    已经设置了FreeOnTerminate := true;
    Execute;这段运行完就自动释放线程了
      

  3.   

    个人认为:
    FreeOnTerminate:=True只对以死循环形式实现的线程在Terminate时起做用,你现在的这种线程,在运行完到最后一条语句,会自动释放的.
      

  4.   

    Execute过程不运行完是无法free的
    楼上可以试验
    procedure mythread.Execute;
    begin
     FreeOnTerminate := true;
     while true do
      beep(1);
      sleep(100);
    end;
    不管你运行几次mythread.Terminate线程都不会结束