TThread的结束的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 hlei
  • 开始时间 开始时间
H

hlei

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Form1窗口的FormCreate事件里创建线程 Thread.Create(False);
我想在这个线程结束后就关闭Form1窗口,所以我在 Thread.DoTerminate 的事件里写上了
Form1.Close;和Application.Terminate;
都没用。为什么? 要怎么样做到这个线程结束后Form1窗口就关闭?
 
我在Form1窗口的FormCreate事件里创建线程 Thread.Create(False);
我想在这个线程结束后就关闭Form1窗口,所以我在 Thread.DoTerminate 的事件里写上了
Form1.Close;和Application.Terminate;
都没用。为什么? 要怎么样做到这个线程结束后Form1窗口就关闭?
 
將在要結束的過程或函數寫到TThread裡,然後調用就可以結束了。
 
1、可以线程结束时用PostMessage(Form1.handle, WM_CLOSE, 0, 0)代替一下试试。
2、笨办法,用一个定时器检测线程是否结束,是则退出。
 
结束时通过发消息通知主线程.在主线程序里调Application.Terminate;
 
可以在Thread.DoTerminate中触发一个Timer,Timer中写入Form1.Close和Application.Terminate;
我在网络事件处理时写的Application.Terminate也不起作用,为什么会这样?
请大侠们帮忙解疑!我会开贴送分的,谢谢;
 
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ThreadDone(Sender: TObject);
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
type
MyThr = class(TThread)
private
protected
procedure Execute;
override;
end;

procedure MyThr.Execute;
var i : integer;
begin
for i:=0 to MaxIntdo
begin
end ;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
with MyThr.Create(false)do
OnTerminate := ThreadDone;
end;

procedure TForm1.ThreadDone(Sender: TObject);
begin
Close ;
end;

end.
 
这个地方有个错误
procedure TForm1.Button1Click(Sender: TObject);
begin
with MyThr.Create(false)do
OnTerminate := ThreadDone;
end;

改成如下就好了
procedure TForm1.Button1Click(Sender: TObject);
begin
with MyThr.Create(false)do
OnTerminate := Form1.ThreadDone;
end;
 
多人接受答案了。
 
后退
顶部