delphi - 如何使用TThread.Synchronize()检索TEdit控件的文本?

标签 delphi c++builder

如何使用TThread.Synchronize()检索TEdit控件的文本。我应该将TEdit文本分配给全局变量还是其他?

最佳答案

首先,在您的表单中声明一个检索文本的方法。
可以从主线程和辅助线程中调用此方法:

Type
  TMyGetTextProc = procedure(var s: String) of object;

procedure TForm1.GetMyText(var myText: String);
begin
  TThread.Synchronize(nil,
    procedure 
    begin
      myText := ATedit.Text;
    end
  );
end;




其次,当您创建线程时,在create方法中传递(callback)方法,并使用它以线程安全的方式获取文本:

Type
  TMyThread = Class(TThread)
  private
    FGetTextCallback: TMyGetTextProc;
  public
    constructor Create(aGetTextProc: TMyGetTextProc);
  ...
  end;


请注意,如果您愿意,也可以直接从线程进行同步。关键是您将回调方法传递给工作线程。

正如David在评论中提到的,始终将UI部分与工作线程分开(对于所有业务逻辑也是如此)。即使在小型程序中,由于它们会随着时间的流逝而增长,因此突然之间,您会发现自己(或同事)处境不好,并且拥有许多难以维护或理解的代码。

关于delphi - 如何使用TThread.Synchronize()检索TEdit控件的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30847334/

相关文章:

Delphi 动态数组效率

sql-server - 使用 Delphi 直接连接到远程 SQL Server

delphi - 使用 Indy 测量网络流量

delphi - Embarcadero RAD Studio XE2 调试器中显示的局部变量的准确度是多少?显然1不等于1

delphi - TStatusBar 与底部对齐面板

delphi - 有什么方法可以获取 TTimer 发生火灾之前的剩余时间吗?

c++ - 为什么这个函数指针失败了?

c++builder - 抑制 Cppcheck 中自动绑定(bind)事件处理程序从未使用过的警告

windows - SWI-Prolog 和 C++ 集成问题

delphi - 与 C++Builder 2010 相比,是什么导致 C++ Builder XE4 中的 EXE 大小增加了三倍?