我正在处理一些特定的TForm事件[ CMControlListChanging ],并且需要修改那个(插入的)控件,但是当我尝试这样做时,事情变得糟糕,因为显然它并不意味着在VCL操作中这样做.
所以,我需要推迟对照修改,通过排队从[代码走CMControlListChanging ]处理程序,在被称为稍后时间.
当然,我可以做PostMessage的东西,但我想要更通用的方法.
System.Classes单元包含
class procedure Synchronize(ASyncRec:PSynchronizeRecord; QueueEvent:Boolean = False); 超载;
可以做的伎俩,但它检查,无论CurrentThread.ThreadID = MainThreadID,如果是,然后调用方法我尝试立即排队.
延迟调用的任何好方法,至少在主线程上?
不确定这是否是您正在寻找的,但如果您使用的是最新的 Delphi 版本,这些Postpone方法可能会派上用场。在应用可选的非阻塞延迟后,它们在主线程中执行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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
528 次 |
| 最近记录: |