我是线程编程的新手。 (在XE7中)
我很紧张,我可能无意中调用了从线程访问VCL的程序。我的理解是这很危险。
我已经将下面的代码添加到了一些触及VCL的程序中。
(*$IFDEF DEBUG *)
Assert((Windows.GetCurrentThreadId = System.MainThreadID), "Thread error");
(*$ENDIF *)
希望这能够捕获我在线程中对VCL访问过程所做的任何调用。
我想到,如果我可以将此代码插入到某些VCL低级代码中,那么从线程中捕获非法VCL访问会更有效。
我从来没有挖过VCL代码,所以我要求反馈。 VCL代码中是否有一些中心位置可以作为此代码的好地方?
TComponent.Create是一个很好的低级别的地方,但我不关心正在创建的控件。我更关心访问属性(.Left,.Checked)等。
TIA
答案 0 :(得分:0)
这不可能。
在这个方向上有一点是System.Rtti中的TVirtualMethodInterceptor
。您可以使用它来挂钩某些常见类的所有虚拟方法,如TControl或TCheckbox。像SetChecked或SetBounds这样的东西是作为虚方法实现的。所以你可能能够挂钩这些。但是你仍然必须代理这些类的每个实例。
请查看Delphi帮助中的示例。