Beispiel #1
0
        public static async Task RunMainMenuAndWaitForCompletion(string title = "Lakerfield Main Console Menu", Action <ConsoleMenu> addMenuItems = null, bool onlyExitWhenPressingQuit = true)
        {
            var cancellationTokenSource = new CancellationTokenSource();
            var cancellationToken       = cancellationTokenSource.Token;
            var tasks = new List <Task>();

            var menu = new ConsoleMenu(
                (task) => tasks.Add(task),
                cancellationToken,
                title);

            addMenuItems?.Invoke(menu);

            if (onlyExitWhenPressingQuit)
            {
                menu.Add(ConsoleKey.Q, "Quit", () =>
                {
                    cancellationTokenSource.Cancel();
                    return(Task.CompletedTask);
                });

                while (!cancellationToken.IsCancellationRequested)
                {
                    await menu.Run();

                    if (cancellationToken.IsCancellationRequested)
                    {
                        break;
                    }
                    Console.WriteLine();
                    Console.WriteLine($@"Exit prevented, to quit Q must be pressed");
                }
            }
            else
            {
                await menu.Run();
            }

            tasks = tasks.Where(t => !t.IsCompleted).ToList();
            Console.WriteLine($"Waiting for completion of {tasks.Count} tasks...");
            await Task.WhenAll(tasks);
        }
Beispiel #2
0
 public Task RunSubMenu(ConsoleMenu subMenu)
 {
     return(RunTask(subMenu.Run()));
 }