delphi – 在同一[main]线程上调用队列过程
发布时间:2020-12-15 09:27:25 所属栏目:大数据 来源:网络整理
导读:我正在处理一些特定的TForm事件[CMControlListChanging], 并且需要修改那个(插入的)控件,但是当我尝试这样做时,事情会变坏,因为显然它并不意味着在VCL操作过程中这样做. 因此,我需要通过将代码排除在[CMControlListChanging]处理程序之外来推迟控制修改,以便
我正在处理一些特定的TForm事件[CMControlListChanging],
并且需要修改那个(插入的)控件,但是当我尝试这样做时,事情会变坏,因为显然它并不意味着在VCL操作过程中这样做. 因此,我需要通过将代码排除在[CMControlListChanging]处理程序之外来推迟控制修改,以便稍后调用. 当然,我可以做PostMessage的东西,但我想要更通用的方法. System.Classes单元包含 class procedure Synchronize(ASyncRec:PSynchronizeRecord; QueueEvent:Boolean = False);超载; 这可以做到这一点,但它检查,是否 延迟调用的任何好方法,至少在主线程上? 解决方法
不确定这是否是您正在寻找的,但如果您使用的是最近的Delphi版本,这些推迟的方法可能会派上用场.它们在应用可选的非阻塞延迟后在主线程中执行AProc.
uses System.Threading,System.Classes; procedure Postpone(AProc: TThreadProcedure; ADelayMS: Cardinal = 0); overload; begin TTask.Run( procedure begin if ADelayMS > 0 then begin TThread.Sleep(ADelayMS); end; TThread.Queue(nil,AProc); end); end; procedure Postpone(AProc: TThreadMethod; ADelayMS: Cardinal = 0); overload; begin TTask.Run( procedure begin if ADelayMS > 0 then begin TThread.Sleep(ADelayMS); end; TThread.Queue(nil,AProc); end); end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |