static void Main(string[] args) { IDisplay display = new ScreenDisplay(); CheckerContainer checkerContainer = FullCheckerContainer(); CooperateMachines work = new CooperateMachines(display, checkerContainer); StartProgramm(work); }
/// <summary> /// Начало работы метода по выходу из программы происходит до начала прямой работы конвеера /// сделано для того, чтобы он не успел перехватить управление главным потоком /// </summary> static void StartProgramm(CooperateMachines work) { Action <object> action = (object obj) => { ExitProgramm(work); }; Task stoppingTask = Task.Factory.StartNew(action, "Stopping"); StartWorking(work); }
static void ExitProgramm(CooperateMachines work) { while (true) { ConsoleKeyInfo key = Console.ReadKey(true); if (key.Key == ConsoleKey.Escape || key.Key == ConsoleKey.Backspace) { work.EndWork(); Environment.Exit(0); } } }
static void StartWorking(CooperateMachines work) { try { work.StartWork(); } catch (Exception ex) { Console.WriteLine("Unnexpected error:\n" + ex.Message); Environment.Exit(0); } }