delphi xe中使用线程出现问题

uestcwang 2011-05-18 08:19:29
type
MyThread=class(TThread)
private
protected
procedure Execute; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i:mythread;
begin
i:=mythread.Create;
end;
{ MyThread }
procedure MyThread.Execute;
var i:integer;
begin
inherited;
FreeOnTerminate:=true;
for I := 0 to 80000 do begin
form1.Edit1.Text:=inttostr(i);
form1.Edit1.Refresh;
end;
end;


点击 button1时,edit1中每次出现不同的数值,都不是80000
...全文
214 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mit1208 2011-05-19
  • 打赏
  • 举报
回复
使用Delphi自带的Sychronize同步VCL也行
使用SendMessage/PostMessage发送消息使用VCL接收也行!
ansinlee 2011-05-18
  • 打赏
  • 举报
回复
这是因为MyThread和主线程不同造成的,
在线程中不要做刷新GUI的操作,这是Delphi线程使用的常识。
既然用了XE你可以这么做。



procedure TMyThread.Execute;
var
i: integer;
begin

for i := 0 to 80000 do
Synchronize(
procedure
begin
Form1.Edit1.Text := IntToStr(i);
end //注意没有分号
);


end;

uestcwang 2011-05-18
  • 打赏
  • 举报
回复
我的意思,单击一次button1后,edit1显示变化,但是循环结束后不是80000,而某个数

再单击一次button1后,edit1显示变化,但是循环结束后不是80000,也是另外一个数
Mit1208 2011-05-18
  • 打赏
  • 举报
回复
for I := 0 to 80000 do begin
form1.Edit1.Text:=inttostr(i);

你这里就是循环从0到80000啊.
Edit内的数值怎么会相同???
不是太明白你的意思
cntigercat 2011-05-18
  • 打赏
  • 举报
回复
i:=mythread.Create;
这个能运行吗?

我刚才试了,没问题的
i:=MyThread.Create(False);

5,387

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧