【发布时间】:2010-11-29 17:17:28
【问题描述】:
我对在 C# 中使用 FileSystemWatcher 有疑问。
在指定文件夹中创建文件时需要通知我,但问题是如果我同时创建多个文件,多个事件被触发,我需要代码仅在前一个文件被处理而不是处理时继续多个文件。
有什么办法吗?
非常感谢
【问题讨论】:
-
无法为此提供伪代码,但您可能必须让触发的方法在单独的线程中执行并使用线程锁。
标签: c# filesystemwatcher
我对在 C# 中使用 FileSystemWatcher 有疑问。
在指定文件夹中创建文件时需要通知我,但问题是如果我同时创建多个文件,多个事件被触发,我需要代码仅在前一个文件被处理而不是处理时继续多个文件。
有什么办法吗?
非常感谢
【问题讨论】:
标签: c# filesystemwatcher
伪代码:
bool wasLastObjectProcessed = true
function onFileWatcherCreateFile
lock wasLastObjectProcessed
if wasLastObjectProcessed and processFile(file)
#do some code here that you need to do if it is processed
else
wasLastObjectProcessed = false
endif
endlock
endfunction
【讨论】:
Queue<T>
FileSystemWatcher 中排队确保使用Queue.Synchronized以线程安全的方式使用它
【讨论】:
我处理文件系统监视程序的方式是,每当事件触发时,我都会将该事件的详细信息添加到队列中。然后我设置了一个 5 秒的时间来处理队列。该计时器有望确保文件已完成复制并且所有操作均已完成(即引发多个事件)。
在处理队列时,您可以使用锁来确保队列在任何给定时间仅由一个线程处理,然后您可以从队列中取出内容并处理它,直到队列为空,然后您就可以完成。
如果您希望能够在处理队列时添加到队列中,您可能需要进行一些适当的锁定。
【讨论】: