Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# filesystemwatcher多个文件_C#_Filesystemwatcher - Fatal编程技术网

C# filesystemwatcher多个文件

C# filesystemwatcher多个文件,c#,filesystemwatcher,C#,Filesystemwatcher,我怀疑在C#中使用FileSystemWatcher。 当在指定文件夹中创建文件时,需要通知我,但问题是如果我同时创建多个文件,并且触发了多个事件,并且我需要代码仅在处理前一个文件而不是同时处理多个文件时才继续 你知道怎么做吗 非常感谢 创建一个队列 在FileSystemWatcher中排队 在另一个线程中退出队列 请确保使用队列以线程安全的方式使用它。Synchronized我处理filesystemwatchers的方式是,每当触发事件时,我都会将该事件的详细信息添加到队列中。然后我设置

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

你知道怎么做吗

非常感谢
  • 创建一个
    队列
  • FileSystemWatcher中排队
  • 在另一个线程中退出队列

  • 请确保使用队列以线程安全的方式使用它。Synchronized

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

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

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

    伪代码:

    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
    

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