//在界面上放一个Timer控件,设置Interval为1000即1秒,当然也可以根据实际情况设置为100,500,以缩短判断时间。 //然后在Timer执行时,记录流逝时间。 //最后在你要处理的过程中,加入对流逝时间的判断,如果大于你预期的时间,则抛出异常。 //--------------------------------------------------- unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, ExtCtrls; type EMyException = class(Exception); TForm1 = class(TForm) StringGrid1: TStringGrid; Button1: TButton; Memo1: TMemo; Memo2: TMemo; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; UsedTime:Integer=0;//秒 implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var ii:integer; begin UsedTime:=0; Timer1.Enabled :=True; Try //以下为你自己的处理过程。中间加入对UsedTime的判断。如果大于你预定的时间,则抛出异常 for ii:=1 to 100000000 do begin application.ProcessMessages; if UsedTime>=2 then raise EMyException.Create('Your custom error message! For example : Timeout!'); end; except Showmessage('TimeOut!'); Timer1.Enabled :=False; end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin UsedTime:=UsedTime+1; end; end. //这里面的关键是,在满足你设定的时间条件后,要用 Raise 抛出一个异常!就可以使程序直接进入 Except 语句里。