2009-04-07 15 views
14

Tenemos una lógica básica de C# que itera sobre un directorio y devuelve las carpetas y archivos dentro. Cuando se ejecuta en una red compartida (\\ servidor \ compartir \ carpeta) que es inaccesible o no válida, el código parece "bloquearse" durante aproximadamente 30 segundos antes de volver de la llamada.Cómo: evitar el tiempo de espera al inspeccionar el recurso compartido de red no disponible - C#

Me gustaría terminar con un método que intentará obtener carpetas y archivos de la ruta determinada, pero sin el período de tiempo de espera. En otras palabras, para reducir o eliminar el tiempo de espera por completo.

He intentado algo tan simple como validar la existencia del directorio anticipando que una unidad de red 'no disponible' devolvería falsa rápidamente, pero eso no funcionó como se esperaba.

System.IO.Directory.Exists(path) //hangs 

System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(path); //hangs 

¿Alguna sugerencia sobre qué puede ayudarme a lograr una solución eficiente (y afortunadamente administrada)?

+0

cualquier definitiva solución con código fuente completo de muestra trabajando al respecto? – Kiquenet

Respuesta

6

Colóquelo en su propio hilo, si no vuelve en un cierto período de tiempo, continúe.

1

¿Quizás podrías intentar hacer ping al servidor primero, y solo pedir la información del directorio si recibes una respuesta?

+0

Lo he usado con éxito para caminar en nuestra red de máquinas, en busca de software. Sin embargo, puede no ser posible analizar el servidor desde la ruta UNC. –

16

Puede utilizar este código:

var task = new Task<bool>(() => { var fi = new FileInfo(uri.LocalPath); return fi.Exists; }); 
task.Start(); 

return task.Wait(100) && task.Result; 
+4

+1 de mí, esto es genial para los archivos, pero usar esto para responder a la pregunta original es inútil. Para responder la pregunta, intente reemplazar 'new FileInfo (uri.LocalPath)' con 'new DirectoryInfo (strPath)' para verificar directorios en lugar de archivos. –

+1

*** esta debería ser la respuesta *** OP pls chng –

Cuestiones relacionadas