如何启用filesystemwatcher来触发每个文件创建的事件而不会丢失任何文件

时间:2012-01-06 20:42:53

标签: c# .net filesystemwatcher

我希望在特定文件夹中创建任何文件后立即收集文件的路径。

我使用了List<string>FileSystemWatcher组件。我在List事件中添加Created的路径,一切正常。

但是,如果创建了许多小文件,比如大约2000,那么Created事件只会被触发1200次。但是,当我不在Created事件中添加路径到列表时,它被调用了2000次。我尝试使用单独的线程,但无济于事。

如何启用FileSystemWatcher来触发每个事件而不会错过某些事件?

3 个答案:

答案 0 :(得分:4)

可能是竞争条件,并且同时将2个文件添加到列表中。最后写赢。在添加到列表之前锁定列表会阻止这种情况。如果您使用.net 4.0,您还可以使用并发字典或readwriteslim来协助解决并发问题。

答案 1 :(得分:3)

确保实施错误事件,以便在出现问题时知道。保持通知事件处理程序简洁明快,只需将文件添加到列表中即可退出。在另一个工作线程中处理列表。增加InternalBufferSize可以提供帮助但应该避免。

答案 2 :(得分:1)

我发现,IIRC,FileSystemWatcher在处理给定Created事件时不会“看到”任何新文件。也就是说,在处理Created事件处理程序时,创建的任何新文件都不会引发事件。

您是否尝试过快速处理(也许是启动异步线程)?我知道你提到了一个单独的线程,但没有代码,很难分辨出该线程正在做什么或如何使用它。