Tengo una aplicación que inicia otras aplicaciones y luego espera a que creen un archivo de datos específico (observa una aplicación a la vez). Cada vez que se lanza una aplicación, observa un directorio específico para crear un archivo específico. Estoy usando FileSystemWatcher para hacer esto (configurarlo en el directorio, luego filtrar el nombre correcto del archivo). Esto funciona genial la primera vez (siempre), pero la segunda aplicación lanzada nunca dispara el evento. La única forma en que parece desencadenar el evento es si coloco un punto de interrupción en el controlador de eventos, o si tengo un comando Thread.Sleep en el controlador de eventos. Esto me parece muy extraño ... ¿hay alguna condición de carrera de la que no tengo conocimiento? Aquí está el código. Tenga en cuenta que tengo un Thread.Sleep (500). Con esta línea el código funciona todo el tiempo. Sin eso, fallará. Realmente no me siento cómodo confiando en un comando de Suspensión. No estoy seguro de qué condición hará que no funcione tan bien.FileSystemWatcher - evento que no se activa por segunda vez
public static void watchFiles(string path)
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = path;
watcher.Created += new FileSystemEventHandler(watcher_Handler);
watcher.EnableRaisingEvents = true;
}
public static void watcher_Handler(object sender, FileSystemEventArgs e)
{
//Hack - the sleep allows the second and third application to be caught by this event
Thread.Sleep(500);
switch (e.ChangeType.ToString())
{
case "Changed":
break;
case "Deleted":
break;
case "Created":
if (e.Name == "log.dat")
{
parseDataFile();
moveHTMLtoLMS();
}
break;
default:
break;
}
}
Alguien sabe por qué tengo que tener ese sueño (o punto de ruptura) para obtener el código para trabajar por segunda vez?
este código se ve bien para mí. – Simone
nota: no es necesario que use 'e.ChangeType.ToString()' en el interruptor, solo active 'e.ChangeType' y establezca los casos' ChangeType.XXX'. Esto lo hace fuertemente tipado y menos propenso a errores. – Femaref
El observador del sistema de archivos parece tener muchas advertencias. http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.oncreated.aspx Dicho esto, ¿está seguro de que los diversos observadores no miran el mismo directorio? – NotMe