线程正在桌面上写

时间:2013-11-27 22:23:51

标签: multithreading delphi delphi-7

我试图创建一个运行时线程,但线程表现得很奇怪,代码没有画布引用。

procedure TBruteThread.Execute;
var
  j: Integer;
begin
  inherited;
  FreeOnTerminate:=True;
  for j:=1 to StrToInt(Form1.Edit1.Text) do begin
    if Terminated then break;
    Form1.Label2.Caption:=IntToStr(j);
  end;
  Form1.Label2.Caption:='Thread is destroyed';
  Self.Terminate;
end;

enter image description here

有人有任何想法解决这个奇怪的问题吗?

1 个答案:

答案 0 :(得分:5)

您的代码存在的问题是它违反了VCL线程规则。必须从主线程访问VCL组件。使用Synchronize或Queue(TThread的方法)在主线程上执行GUI更新。

其他评论:

  • 在线程方法之外设置FreeOnTerminate。
  • 调用Terminate作为线程方法的最后一个行为是没有意义的。线程即将终止。