Bonjour,

Voici le code de la procédure récursive :

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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
// copie du dossier
		private void CopyDir(string sourceDir, string destDir,int TID)
		{
			DirectoryInfo dir = new DirectoryInfo(sourceDir); if (dir.Exists)
			{
				try
				{
					string realDestDir;
					if (dir.Root.Name != dir.Name)
					{
						realDestDir = Path.Combine(destDir, dir.Name);
						if (!Directory.Exists(realDestDir))
							Directory.CreateDirectory(realDestDir);
					}
					else realDestDir = destDir;
					foreach (string d in Directory.GetDirectories(sourceDir))
					{
						// if ((new DirectoryInfo(d).Attributes & FileAttributes.System) != FileAttributes.System)
						if (!Tcontinue[TID]) break;
						CopyDir(d, realDestDir, TID);
					}
 
					if (!Tcontinue[TID]) return; 
					foreach (string file in Directory.GetFiles(sourceDir))
					{
						if (!Tcontinue[TID]) break;
						string fileNameDest = Path.Combine(realDestDir, Path.GetFileName(file));
						CopyFile(file, fileNameDest, TID);
					}
				}
				catch
				{
					// on stocke l'erreur
					if (errs[TID].Count < 50)
						errs[TID].Add(DateTime.Now.ToLongTimeString() + " : [" + appli_saved[TID] + "] Le répertoire \"" + sourceDir + "\" n'est plus accessible.");
					else
					{
						errs[TID].Add(DateTime.Now.ToLongTimeString() + " : [" + appli_saved[TID] + "] 50 erreurs sont apparues, arret de la sauvegarde " + appli_saved[TID]);
						Tcontinue[TID] = false;
						return;
					}
				}
			}
			else
				errs[TID].Add(DateTime.Now.ToLongTimeString() + " : [" + appli_saved[TID] + "] Le répertoire \"" + sourceDir + "\" est introuvable.");
		}
Mon programme copie via plusieurs threads des dossiers volumineux.
Aussi pour controler l'annulation de chaque thread, j'ai un tableau de boolean (Tcontinue[]) qui normalement devrait me permettre d'annuler en cours de copie un thread. Pour cela je souhaite controler dans la procédure "CopyDir" si la valeur contenue dans Tcontinue est true ou false, si false alors il faut sortir de la procédure et c'est à ce moment là que j'ai le problème, je n'arrive pas à sortir de la procédure, une idée ? Est-ce dû à la récursivité ?

Ps : TID est l'identifiant du thread en cours.

Merci