任何关于使用TTimer来监控文件日期和更新屏幕的gottcha?

Rob*_*ank 3 delphi

我想检测文件日期何时更改并更新用作Tdatasource的DevX TdxMemData,然后在使用它的TDBGrid中看到它.

我发现了一些使用ReadDirectoryChangesW的代码,但对于我的简单需求似乎相当复杂.

我正在考虑使用TTimer并每五秒钟关闭一次.(这对我而言足够准确.)

这样做有什么警告吗?我已经读过Threads对VCL访问等有各种各样的限制.同样的事情适用于TTimer事件吗?

在Timer事件中调用FileAge和更新DevEx TdxMemData对象时,我需要注意什么?我的主应用程序会看到这些更新吗?

当Timer事件得到控制时,有没有办法检测程序的"状态",这样我可以避免出现问题?

或者我在考虑使用TTimer时打开了一大堆蠕虫?

Zoë*_*son 8

在主应用程序线程中调用TTimer事件,因此从它们访问VCL对象没有问题.当您的应用程序处于空闲状态时调用它,因此除非您手动调用Application.ProcessMessages,否则在OnClick处理程序或类似内容中不会发生此操作.

我建议使用ReadDirectoryChangesW.如果使用计时器,即使应用程序处于空闲状态且文件未更改,您也将继续轮询.它可以防止你的CPU闲置,并保持硬盘不停机,这可能会对节能和电池使用产生负面影响.


Har*_*riv 5

在Demos目录中有"ShellChangeNotifier"组件,它将在文件在目录中修改,添加或删除时触发事件.但是它只有一个OnChange事件,所以你不知道到底发生了什么.

关于about.com中的问题有一些讨论和解决方案