一个动态创建的Timer,为何Timer.free后,关闭程序主窗口时会出错?(50分)

  • 主题发起人 主题发起人 bo717
  • 开始时间 开始时间
B

bo717

Unregistered / Unconfirmed
GUEST, unregistred user!
动态创建个Timer,就算Ontimer里边不写代码,只要Free过后,一关闭程序就会出现Runtime error,为什么呢?
 
没有啊,我的是delphi6的环境。下面是全部代码,没出错啊。。。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);

private
{ Private declarations }
procedure ontimer(Sender: TObject);
procedure button2click(Sender: TObject);
public
{ Public declarations }
end;

var
Form1: TForm1;
time:ttimer;
abc:Tbutton;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin
time :=Ttimer.create(nil);
time.interval :=1000;
time.ontimer :=ontimer;
time.enabled :=true;

abc:=Tbutton.Create(Self);
abc.Parent:=Form1;
abc.caption:='abc';
abc.Left :=20;
abc.Top :=20;
abc.onClick:=Button2Click;
end;

procedure Tform1.ontimer(Sender: TObject);
begin
showmessage('222');
end;

procedure Tform1.button2click(Sender: TObject);
begin
time.free;
Form1.Close;
end;

end.
 
如果真有问题,在Free前加一句time.Enabled := False;试试
 
showmessage('222');

换成 label1.caption:='222'

就不会错了.
 
去掉
Form1.Close;
改成
close 即可.
 
我发现是在线程里用timer.free才会出错,为什么呢。
 
timer1:=nil;
 
procedure Tform1.button2click(Sender: TObject);
begin
time.Enabled:=false; //不必free
Close;
end;
end.
 
晕..............
线程里面不应该用 TTimer ,在线程里面调用 VCL 组件会造成危险以及不稳定的,
线程里面要定时就用 SetTime 。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部