【问题标题】:filesystemwatcher multiple filesfilesystemwatcher 多个文件
【发布时间】:2010-11-29 17:17:28
【问题描述】:

我对在 C# 中使用 FileSystemWatcher 有疑问。
在指定文件夹中创建文件时需要通知我,但问题是如果我同时创建多个文件,多个事件被触发,我需要代码仅在前一个文件被处理而不是处理时继续多个文件。

有什么办法吗?

非常感谢

【问题讨论】:

  • 无法为此提供伪代码,但您可能必须让触发的方法在单独的线程中执行并使用线程锁。

标签: c# filesystemwatcher


【解决方案1】:

伪代码:

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

【讨论】:

    【解决方案2】:
    • 创建Queue<T>
    • FileSystemWatcher 中排队
    • 在另一个线程中出队

    确保使用Queue.Synchronized以线程安全的方式使用它

    【讨论】:

      【解决方案3】:

      我处理文件系统监视程序的方式是,每当事件触发时,我都会将该事件的详细信息添加到队列中。然后我设置了一个 5 秒的时间来处理队列。该计时器有望确保文件已完成复制并且所有操作均已完成(即引发多个事件)。

      在处理队列时,您可以使用锁来确保队列在任何给定时间仅由一个线程处理,然后您可以从队列中取出内容并处理它,直到队列为空,然后您就可以完成。

      如果您希望能够在处理队列时添加到队列中,您可能需要进行一些适当的锁定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-13
        • 2021-08-14
        • 1970-01-01
        • 1970-01-01
        • 2014-08-31
        • 1970-01-01
        相关资源
        最近更新 更多