如何刷新挂起的FileSystemWatcher事件?

时间:2009-09-24 11:37:41

标签: c# .net windows

我需要确保在执行操作之前处理所有挂起的FileSystemWatcher事件。有没有办法做到这一点?

4 个答案:

答案 0 :(得分:1)

我完成此任务的解决方案..到目前为止看起来还不错。

while (true)
{
    WaitForChangedResult res = watcher.WaitForChanged(WatcherChangeTypes.All, 1);
    if (res.TimedOut)
         break;
}

答案 1 :(得分:1)

我知道这篇文章很老了,但我刚刚做了这个......你几乎就是那个skevar7。

您只需要将临时文件写入您正在观看的文件夹,然后等待获取Created事件。在Created事件中,您设置一个标志,告诉您的wait循环退出。您的临时文件将在通知队列中排在最后,因此您知道它已被刷新。

如果你有其他线程不断写入监视文件夹,你需要在完成此操作时阻止它们,以保证它完全刷新。

答案 2 :(得分:0)

FileSystemWatcher使用非分页内存中的缓冲区来存储文件系统事件。当您处理每个事件时,它将从此缓冲区中删除,为新事件释放空间。

不是可以无限增长的队列或列表。如果在短时间内有许多事件,则填充缓冲区,然后抛出Error事件。因此,您无法刷新此缓冲区。

如果要在开始处理事件之前确保缓冲区为空,最简单的方法是创建一个新的FileSystemWatcher并在需要之前开始观察。但是,您应该注意不要创建太多的同时观察者,因为每个人都依赖于将缓冲区存储在非分页内存中。

答案 3 :(得分:0)

如果您正在观看文件,请将其打开以进行写入以将其锁定,以便其他人无法访问该文件,从而生成任何新事件。然后等待一毫秒左右。丑陋?是。