2010-11-29 5 views
2

Je doute de l'utilisation de FileSystemWatcher en C#.
Je dois être averti lorsqu'un fichier est créé dans un dossier spécifié, mais le problème est que si je crée plusieurs fichiers en même temps plusieurs événements sont déclenchés et j'ai besoin que le code continue seulement si le fichier précédent a été traité et ne traite pas plusieurs fichiers en même temps.filesystemwatcher fichiers multiples

Toute idée comment faire cela?

Un grand merci

+0

ne peut pas fournir pseudo-code pour cela, mais vous auriez sans doute avoir la méthode qui a déclenché exécuter dans un thread séparé et utilisez le verrouillage de fil. – xbonez

Répondre

1

pseudo-code:

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
  • Créer une Queue<T>
  • Enqueue dans le FileSystemWatcher
  • Dequeue dans un autre thread

Assurez-vous de l'utiliser dans un fil de manière sûre en utilisant Queue.Synchronized

0

La façon dont je gère les systèmes de fichiers est que chaque fois qu'un événement se déclenche, j'ajoute les détails de cet événement à une file d'attente. J'ai ensuite mis une minuterie pendant 5 secondes pour le traitement de la file d'attente. Nous espérons que cette minuterie garantira que les fichiers ont bien été copiés et que toutes les opérations sont terminées (c'est-à-dire que plusieurs événements sont levés). Lors du traitement de la file d'attente, vous pouvez utiliser un verrou pour vous assurer que la file n'est traitée que par un fil à la fois. Vous pouvez ensuite retirer des éléments de la file et les traiter jusqu'à ce que la file soit vide. re fait.

Si vous souhaitez être en mesure d'ajouter à la file d'attente pendant son traitement, vous devrez peut-être effectuer un verrouillage approprié.