【发布时间】:2010-11-30 19:15:44
【问题描述】:
我的服务器必须打印一些关于它的工作的报告。如何在 OneEecute 事件中使用标签、编辑框等视觉对象?
【问题讨论】:
我的服务器必须打印一些关于它的工作的报告。如何在 OneEecute 事件中使用标签、编辑框等视觉对象?
【问题讨论】:
在除主线程之外的任何线程中不修改 VCL 对象的相同规则在这里也有效。您不应更改 OnExecute 事件处理程序中的任何 VCL 控件,因为该代码将在 Indy 为每个连接生成的工作线程的上下文中运行。
如果您需要更改图形用户界面,请使用 Synchronize 或 Queue 方法,或使用自定义通知机制通知主线程为您进行 GUI 修改。
如果你想调用 Synchronize 或 Queue 方法,你必须将 TIdYarn 类型转换为 TIdYarnOfThread,它派生自 TIdYarn 并使用线程实现它:
// Calling MyMethod using Synchornize inside TIdTcpServer.OnExecute event-handler
TIdYarnOfThread(AContext.Yarn).Thread.Synchronize(MyMethod);
// Calling MyMethod using Queue inside TIdTcpServer.OnExecute event-handler
TIdYarnOfThread(AContext.Yarn).Thread.Queue(MyMethod);
【讨论】: