6

如果线程从 Delphi 中的 VCL 控件异步读取信息,线程是否安全?

例如。

procedure TMyThread.Execute;
var bOK:Boolean; 
    iOK:Integer;
begin
   while not terminated do
   begin
      bOk:=MyForm.cbCheckBox.Checked;
      iOK:=MyForm.Left;
      sleep(20);
   end;
end;

如果它不是线程安全的,我应该如何在复选框更改其属性时捕获事件。

4

1 回答 1

11

不,这不安全。您的代码可能会导致创建的窗口句柄与错误的线程有关联。

不要使用 GUI 来存储您的应用程序状态。使用 GUI 显示该状态的视图。一旦你将状态与视图分开,你就回家了。您的工作线程可以使用底层状态状态而无需接触 GUI。

于 2013-01-06T10:40:53.667 回答