public void Run()
        {
            IsRunning = true;
            MoveFocus();
            Paint();

            try
            {
                while (IsRunning)
                {
                    try
                    {
                        var info = Bitmap.Console.ReadKey(true);

                        if (info.Key == ConsoleKey.Escape && ExitOnEscapeCharacter)
                        {
                            break;
                        }
                        else if (info.Key == ConsoleKey.Tab)
                        {
                            MoveFocus(info.Modifiers.HasFlag(ConsoleModifiers.Shift) == false);
                        }
                        else if (focusedControl != null)
                        {
                            focusedControl.OnKeyInputReceived(info);
                        }

                        Paint();
                    }
                    catch (ExitConsoleAppException)
                    {
                        break;
                    }
                }
            }
            finally
            {
                IsRunning = false;
                using (var snapshot = Bitmap.CreateSnapshot())
                {
                    Bitmap.CreateWiper().Wipe();
                    if (ApplicationStopped != null)
                    {
                        ApplicationStopped();
                    }
                    Bitmap.Console.ForegroundColor = ConsoleString.DefaultForegroundColor;
                    Bitmap.Console.BackgroundColor = ConsoleString.DefaultBackgroundColor;
                }
            }
        }