Bonjour à tous ! Tout d'abord bravo pour ce fabuleux forum (une véritable mine de connaissance !)
J'ai créé une application windowsform (je vais pas aller dans le détail de son fonctionnement) à un moment je charge un fichier xml qu'une autre application me transfert dans un dossier, j'ai un thread qui scrute ce dossier et dés qu'il trouve un fichier xml il le lance une méthode privée XmlReadFile qui lit le xml (elle ne le lit pas vraiment, je charge le xml dans un DocumentXml et je récupère les infos du xml)
Alors de temps à autre j'avais une exception comme quoi le xml était déjà en cours d'utilisation par un autre processus (l'autre application n'a surement pas le temps de libérer le xml que le thread met la main dessus) donc j'ai modifié mon code maintenant dans la méthode privée avant de charger le document xml j'ai un while :
Ce while appelle une méthode privée qui me renvoie un booléen et cette méthode regarde si le xml est libre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while(!TryExclusiveOpen(this._valRegistryDictaCom.GetValue("XmlNumber").ToString(), out fs)) { //instruction }
Mon soucis étant que si le fichier n'est jamais liberé ma boucle while sera sans fin comment mettre un TimeOut dans cette première boucle while ? Je vois pas trop comment on fait ... J'aimerai que dans ma première boucle si jamais le fichier au bout de 10 secondes n'est toujours pas libre qu'on affiche un MessageBox.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 private bool TryExclusiveOpen(string filePath, out FileStream fs) { try { fs = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.None); fs.Close(); return true; } catch { fs = null; return false; } }
Merci de votre aide et si je n'ai pas été clair n'hésitez pas à me demander des précisions![]()
Partager