我在MainForm中启用了一个线程MyThread.我想在MainForm退出之前先把MyThread给关闭
了。我是这样写的:
Procedure TMainForm.WhenClose;
beign
  MyThread.suspend;
  Application.Terminate;
end;
可当在‘MyThread.suspend’时,系统提示‘ThreadError,无效句柄',这是为什么啊?
我要在退出 MainForm之前关闭MyThread应该怎么办?

解决方案 »

  1.   

    给线程指定拥有者Application,Application推出时会将其自动释放
      

  2.   

    你的WhenClose是什么时候调用的?在一般情况下调用Suspend会出问题吗? 你怎么喜欢用Application.Terminate???可能Thread已经被放掉了.或者你试试Suspended属性.
      

  3.   

    系统提示‘ThreadError,无效句柄',说明你的线程这时已经结束了。
      

  4.   

    To  wetrust() :
        能够告诉我怎样指定线程的拥有者吗?To  plainsong(伤心的风) :
      在系统提示‘ThreadError,无效句柄'之前,线程的handle为52,而把MyThread.suspend改为
    MyThread.terminate,系统没有报错!
      

  5.   

    你在关闭线程以前,线程就已经结束了!或者你的线程根本就没执行!
    建议你在线程的execute事件加上这句话 FreeOnTerminate:=True;
    这样试看看
      

  6.   

    对不起,指定线程的拥有者一说看来有误.
    你可以在线程构造函数中使用FreeOnTerminate:=True,然后在程序退出时设置线程的Terminated:=True,在execute中检测eTerminated,为false时线程执行.不过要解决线程先于程序结束时自动释放以至于不能正常访问问题.