相关疑难解决方法(0)

我可以在非GUI线程中读取VCL控件的属性吗?

如果一个线程异步读取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;
Run Code Online (Sandbox Code Playgroud)

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

delphi asynchronous thread-safety

6
推荐指数
1
解决办法
284
查看次数

在Thread中使用EnterCriticalSection来更新VCL标签

我是线程的新手.我正在使用第三方库,它使用的线程有时会调用我提供的程序.

当线程调用时,如何从我的过程更新TLabel.Caption?

如果我在其他地方调用了InitializeCriticalSection,那就像它一样简单

  EnterCriticalSection(CritSect);
  GlobalVariable := 'New TLabel.Caption';
  LeaveCriticalSection(CritSect);
Run Code Online (Sandbox Code Playgroud)

然后在我的主线程中:

  EnterCriticalSection(CritSect);
    Label1.Caption:= GlobalVariable;
  LeaveCriticalSection(CritSect);
Run Code Online (Sandbox Code Playgroud)

但是,如何获取要调用的主线程代码?线程可以使用SendMessage吗?或者是否有一些更好/更简单的方法(.OnIdle可以检查线程设置的标志?)

谢谢.

delphi vcl synchronization thread-safety

4
推荐指数
2
解决办法
5272
查看次数