Problemón con FilesystemWatcher y multithreading

26/04/2005 - 09:27 por Cecilio | Informe spam
Buenas, a ver si a alguien le ha ocurrido algo similar porque a mi este
problema me está dejando perplejo.

Tengo una aplicación, desarrollada en c# con el Framework 1.1, que consiste
en un formulario principal que tiene activado un FileSystemWatcher, este
cada vez que se activa lanza un proceso en un thread aparte que hace una
consulta a una base de datos y los exporta en formato XML.
Esta aplicación, esta ejecutandose siempre en un servidor al que no tiene
acceso ningún usuario (descartemos la acción de una mano "tonta").
Pues bien, cada cierto tiempo , digamos una vez cada diez días más o menos,
el programa se apaga.
Este mismo programa (excepto alguna personalización) , está funcionando
correctamente en otros clientes, sin embargo aquí es la tercera vez que
pasa.
En el Try -Cacht del evento del FileSystemWacher genero un log, pero este
no me indica niguna información.
A primera vista se me ocurren tres posibles causas:
* En los Threads donde se realiza la consulta a la BBDD da un error y se
cuelga. Sin embargo, según tengo entendido, un error no controlado en un
thread provoca que caiga dicho thread, no la aplicación entera (si alguien
me puede confirmar está afirmación se lo agradecería).
* Error del FileSystemWacher. En este cliente hay un mayor volumen de carga
que en los otros. ¿Es posible que esto provoque un error en el componente, o
que genere más threads de los permitidos, y que sea el causante del
problema?
*Bug en el Framework. Tengo instalado el última service pack de la versión
1.1

Muchas gracias y un Saludo.

Preguntas similare

Leer las respuestas

#1 Anonimo
26/04/2005 - 13:49 | Informe spam
Puedes aportar más información sobre la forma de creación
y llamada al Thread ?


Mostrar la cita
porque a mi este
Mostrar la cita
Framework 1.1, que consiste
Mostrar la cita
FileSystemWatcher, este
Mostrar la cita
aparte que hace una
Mostrar la cita
XML.
Mostrar la cita
servidor al que no tiene
Mostrar la cita
mano "tonta").
Mostrar la cita
diez días más o menos,
Mostrar la cita
está funcionando
Mostrar la cita
tercera vez que
Mostrar la cita
un log, pero este
Mostrar la cita
da un error y se
Mostrar la cita
controlado en un
Mostrar la cita
entera (si alguien
Mostrar la cita
mayor volumen de carga
Mostrar la cita
en el componente, o
Mostrar la cita
causante del
Mostrar la cita
pack de la versión
Mostrar la cita
#2 Cecilio
26/04/2005 - 16:01 | Informe spam
private static void moWatcher_Created(object sender, FileSystemEventArgs e)

{

Thread.Sleep(1000);

try

{

StreamReader srFile = File.OpenText(e.FullPath);

AbrirForm abrirForm = null;

//Para ver el nombre de sesion que esta al final del nombre del fichero
.spool despues del "_"

if (e.Name.IndexOf('_') != -1)

{

abrirForm = new AbrirForm(srFile.ReadToEnd(),

e.Name.Substring(e.Name.IndexOf('_') + 1,

e.Name.Length - e.Name.IndexOf('_') - 7));

}

else

{

abrirForm = new AbrirForm(srFile.ReadToEnd(), "");

}

// Ejecutar el thread encargado de lanzar los forms

Thread tAbrirForms = new Thread(new ThreadStart(abrirForm.abrirForms));

lock (listaThreads)

{

listaThreads.Add(tAbrirForms);

}

tAbrirForms.Start();

while(!tAbrirForms.IsAlive);

Thread.Sleep(1);

// Eliminar fichero

srFile.Close();

//file.Delete();

}

catch

{

}

}



escribió en el mensaje
news:033001c54a56$0b1510e0$
Puedes aportar más información sobre la forma de creación
y llamada al Thread ?


Mostrar la cita
porque a mi este
Mostrar la cita
Framework 1.1, que consiste
Mostrar la cita
FileSystemWatcher, este
Mostrar la cita
aparte que hace una
Mostrar la cita
XML.
Mostrar la cita
servidor al que no tiene
Mostrar la cita
mano "tonta").
Mostrar la cita
diez días más o menos,
Mostrar la cita
está funcionando
Mostrar la cita
tercera vez que
Mostrar la cita
un log, pero este
Mostrar la cita
da un error y se
Mostrar la cita
controlado en un
Mostrar la cita
entera (si alguien
Mostrar la cita
mayor volumen de carga
Mostrar la cita
en el componente, o
Mostrar la cita
causante del
Mostrar la cita
pack de la versión
Mostrar la cita
#3 Juan Carlos
26/04/2005 - 20:27 | Informe spam
Ya que se esta cerrando la aplicacion, puede que estes capturando una
excepcion en alguna parte y no la estes atrapando.
Cuando inicia la Apliacion create un bloque try catch y captura la exepcion
lanzada desde cualquier parte del codigo y asi puedes registrar el error que
esta sucediendo.

Te sugiero lo siguiente, sin ver tu codigo, reviza la parte donde tomas el
archivo y trata de preguntar si el archivo esta siendo usado en ese momento,
yo he tenido muchos problemas de ese tipo usado filesystemwatcher, ya que
hay archivos muy grandes y al momentos de pasarlos el agente comienza a
trabajar sin que el archivo lo hayan soltado.
Espero te sirva esto.
"Cecilio" escribió en el mensaje
news:%
Mostrar la cita
consiste
Mostrar la cita
menos,
Mostrar la cita
carga
Mostrar la cita
o
Mostrar la cita
#4 Cecilio
27/04/2005 - 09:42 | Informe spam
La verdad es que eso tiene bastante sentido, sin embargo lo que no veo claro
es la posible solución a dar.


"Juan Carlos" escribió en el mensaje
news:
Mostrar la cita
#5 Juan Carlos
27/04/2005 - 15:02 | Informe spam
Pues yo tampoco he encontrado algun metodo que pregunte esto o que me de
informacion de esto. Lo que me ha tocado es jugar con las excepciones, es
decri cuando el sistema diga o lanze la excepcion The File is using by
another process o algo asi, manejala y dile que lo intente mas tarde...

"Cecilio" escribió en el mensaje
news:%
Mostrar la cita
claro
Mostrar la cita
el
Mostrar la cita
que
Mostrar la cita
este
Mostrar la cita
una
Mostrar la cita
tiene
Mostrar la cita
se
Mostrar la cita
un
Mostrar la cita
Ads by Google
Search Busqueda sugerida