我想要检测文件日期何时发生变化,并更新用作that源的DevX TdxMemData,然后在使用它的TDBGrid中看到它。
我发现了一些使用ReadDirectoryChangesW的代码,但对于我的简单需求来说似乎相当复杂。
我正在考虑使用TTimer,并每隔5秒启动一次。(这对我来说已经足够准确了。)
这样做有什么需要注意的地方吗?我读到过线程对VCL访问有各种各样的限制,等等。同样的事情也适用于TTimer事件吗?
在Timer事件中调用FileAge和更新DevEx TdxMemData对象时有什么需要注意的地方吗?我的主应用程序会看到这些更新吗?
当计时器事件得到控制时,有没有办法检测我的程序的“状态”,这样我就可以避免出现问题?
或者我打开了一个巨大的蠕虫罐头,考虑使用TTimer来完成这个任务?
发布于 2010-03-06 16:43:41
在Demos目录中有一个"ShellChangeNotifier“组件,当目录中的文件被修改、添加或删除时,该组件将触发事件。但是它只有一个OnChange事件,所以你不知道到底发生了什么。
在about.com中有一些关于这个问题的讨论和解决方案
发布于 2010-03-06 11:54:46
TTimer事件是在主应用程序线程中调用的,因此从它们访问VCL对象不会有任何问题。它在您的应用程序空闲时调用,因此除非您手动调用Application.ProcessMessages,否则它不会在您处于OnClick处理程序或类似处理程序中时发生。
不过,我还是建议使用ReadDirectoryChangesW。如果您使用计时器,即使应用程序空闲并且文件没有变化,您也会继续轮询。它将使您的CPU不会空闲,并且可以防止硬盘驱动器停止旋转,这可能会对节能和电池使用产生负面影响。
发布于 2010-03-06 13:31:53
Windows允许您监视文件更改。作为快速入门,请参阅http://delphi.about.com/od/kbwinshell/l/aa030403a.htm。也有几个现成的组件可用。谷歌搜索"delphi monitor file change“或类似的东西
https://stackoverflow.com/questions/2391163
复制相似问题