while(true)do 因为这是无限循环!
而且application.processmessages是通知程序处理其他的消息!
但你点正常关闭窗口时,程序会等待从button1Click返回再结束程序,
但这里明显button1click不回返回!所以程序不结束!
procedure TForm1.Button2Click(Sender: TObject);
begin
        Application.Terminate;//这个试正常结束程序,所以关不掉
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
        halt;//这个强制结束,所以关掉程序了!
end;

解决方案 »

  1.   

    to ch81:你再看看:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      memo1.lines.clear;
      while(true)do
       begin
         memo1.lines.add((sender as tbutton).name;
         Application.ProcessMessages;
       end;
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    memo2.lines.clear;
      while(true)do
        begin
         memo2.lines.add((sender as tbutton).name));
         Application.ProcessMessages;
        end;
    end;
    点击Button1后memo1 开始刷,,,,点击button2后memo2 开始刷,而且此时memo1停止刷了,,是不是说明button1click被强行停止了?要不为什么memo1 不动了?不管如何都应该能响应WM_CLOSE 才对啊`~~~~~~WHY ? 谢谢
      

  2.   

    : hongminghu(洪湖) 
    我认为这个问题是:由于Delphi的VCL界面库,每次只允许一个线程
    对其进行操作!这是为了同步的问题!防止界面混乱!
    而你用两个无限循环对界面操作,而且都加入了application.processmessages
    这个可能对于delphi的vcl库,这样的操作也是禁止的!
    所以当你启动另一个的时候,前一个被强制禁止!
    不知对不对!