我希望在特定文件夹中创建任何文件后立即收集文件的路径。
我使用了List<string>
和FileSystemWatcher
组件。我在List
事件中添加Created
的路径,一切正常。
但是,如果创建了许多小文件,比如大约2000,那么Created
事件只会被触发1200次。但是,当我不在Created
事件中添加路径到列表时,它被调用了2000次。我尝试使用单独的线程,但无济于事。
如何启用FileSystemWatcher
来触发每个事件而不会错过某些事件?
答案 0 :(得分:4)
可能是竞争条件,并且同时将2个文件添加到列表中。最后写赢。在添加到列表之前锁定列表会阻止这种情况。如果您使用.net 4.0,您还可以使用并发字典或readwriteslim来协助解决并发问题。
答案 1 :(得分:3)
确保实施错误事件,以便在出现问题时知道。保持通知事件处理程序简洁明快,只需将文件添加到列表中即可退出。在另一个工作线程中处理列表。增加InternalBufferSize可以提供帮助但应该避免。
答案 2 :(得分:1)
我发现,IIRC,FileSystemWatcher
在处理给定Created
事件时不会“看到”任何新文件。也就是说,在处理Created
事件处理程序时,创建的任何新文件都不会引发事件。
您是否尝试过快速处理(也许是启动异步线程)?我知道你提到了一个单独的线程,但没有代码,很难分辨出该线程正在做什么或如何使用它。