2010-11-29 22 views
2

私はC#でFileSystemWatcherを使用して疑いがあります。
ファイルが指定されたフォルダに作成されたときに通知する必要がありますが、同時に複数のファイルを作成して複数のイベントが発生し、前のファイルが処理された場合にのみコードが継続する必要があります複数のファイルを同時に処理しないでください。filesystemwatcher複数のファイル

どのように手がかりを取るか?

感謝

+0

は、このための擬似コードを提供することはできませんが、おそらく別のスレッドで実行し、スレッドロックを使用してトリガのメソッドを持っている必要があるだろう。 – xbonez

答えて

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 
0

は、使用して、スレッドセーフな方法でそれを使用していることを確認し、別のスレッドでFileSystemWatcher

  • デキューにQueue<T>
  • エンキューを作成しQueue.Synchronized

  • 0

    ファイルシステムウォッチャーを扱う方法イベントが発生するたびにそのイベントの詳細をキューに追加するということです。次に、キューを処理するために5秒間タイマーを設定します。このタイマーは、ファイルのコピーが完了し、すべての操作が完了していることを確認します(つまり、複数のイベントが発生しています)。

    キューを処理するときにロックを使用して、ある時点でキューが1つのスレッドのみで処理されていることを確認してから、キューを空にしてキューが空になるまで処理し、再実行されます。

    処理中にキューに追加したい場合は、適切なロックを行う必要があります。

    関連する問題