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");
        }
Ejemplo n.º 2
0
        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");
        }