public void Start() { if (!Directory.GetParent(TreePath).Exists) { Directory.CreateDirectory(Directory.GetParent(TreePath).ToString()); } if (File.Exists(TreePath)) { File.Delete(TreePath); } FileReaderLogic root = new FileReaderLogic(ViewPath, TreePath, LogPath); Thread[] ThreadArray = new Thread[3]; // Parallel.Invoke(()=> { root.Start(); }, () => { root.Start(); }, () => { root.Start(); }); for (var i = 0; i < ThreadArray.Length; i++) { ThreadArray[i] = new Thread(root.Start); ThreadArray[i].Start(); ThreadArray[i].Name = (i + 1).ToString(); } bool stop = false; while (true) { if (stop) { break; } _key = Console.ReadKey(true); if (!ThreadArray[0].IsAlive && !ThreadArray[0].IsAlive && !ThreadArray[0].IsAlive) //if(!ThreadArray.All(x => x.IsAlive)) { Console.WriteLine("All thread are stopped"); } switch (_key.Key) { case ConsoleKey.Spacebar: { if (ThreadArray.Any(x => x.ThreadState == ThreadState.Running)) { root.WaitHandler.Reset(); } else { root.WaitHandler.Set(); } break; } case ConsoleKey.F1: { foreach (Thread thr in ThreadArray) { Console.WriteLine(thr.Name + " " + thr.ThreadState + " " + thr.IsAlive); } break; } case ConsoleKey.Escape: { foreach (Thread thr in ThreadArray) { thr.Abort(); } stop = true; break; } } } Console.WriteLine("--------------------------"); File.WriteAllLines(TreePath, root.FolderList); File.AppendAllLines(TreePath, root.FileList); Console.WriteLine("Done"); }
public void Start() { if (!Directory.GetParent(ViewPath).Exists) { Console.WriteLine($"Folder dosen`t exist"); return; } if (!Directory.GetParent(_treePath).Exists) { Directory.CreateDirectory(Directory.GetParent(_treePath).ToString()); } if (File.Exists(_treePath)) { File.Delete(_treePath); } var root = new FileReaderLogic(ViewPath, _treePath, _logPath); _tasks = new Task[3] { new Task(() => root.Start(_token)), new Task(() => root.Start(_token)), new Task(() => root.Start(_token)) }; foreach (var task in _tasks) { task.Start(); } while (true) { if (_tasks.All(x => x.Status == TaskStatus.RanToCompletion)) { break; } if (_key.Key == ConsoleKey.F1) { root.WaitHandler.Reset(); } else if (_key.Key == ConsoleKey.F2) { root.WaitHandler.Set(); } else if (_key.Key == ConsoleKey.F3) { foreach (var task in _tasks) { Console.WriteLine($"TaskId {task.Id} {task.Status}"); } } else if (_key.Key == ConsoleKey.Escape) { CancelTokenSource.Cancel(); } _key = Console.ReadKey(true); } Console.WriteLine(new string('-', 30)); File.WriteAllLines(_treePath, root.FolderList); File.AppendAllLines(_treePath, root.FileList); Console.WriteLine("Done"); }