代码如下,为什么一删除线程窗体就没有反映呢???如何解决呢? ( 积分: 35 )

M

mazheng

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下,为什么一删除线程窗体就没有反映呢??如何解决呢?

unit Unit1;

interface

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

type
TForm1 = class(TForm)
mmo1: TMemo;
btn1: TButton;
btn2: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

type
Txyz = class(TThread)
published
procedure Execute
override;
end;

var
XYZThread: Txyz;
Form1: TForm1;

implementation

{$R *.dfm}

procedure Txyz.Execute;
begin
while True do
begin
Form1.mmo1.Lines.Add('123456789');
Application.ProcessMessages;
end;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
XYZThread := Txyz.Create(False);
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
XYZThread.Suspend;
XYZThread.Free;
end;

end.
 
procedure Txyz.displaymemo;
begin
Form1.memo1.Lines.Add('123456789');
end;

procedure Txyz.Execute;
begin
while not Self.Terminated do
begin
Self.Synchronize(displaymemo);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
XYZThread.Terminate;
XYZThread.WaitFor;
XYZThread.Free;
end;


改成这样就可以了,这是标准的线程操作方法。
Application.processmessage方法是主线程中用的,里面涉及消息队列和分源,在工作线程调用它是不对的,工作线程有自己的消息队列函数。。。一两句话我也说不清楚了

线程执行方法和停止方法都是有规定的。
 
顶部