Console.ReadKey() Strange Behavior?

104 Views Asked by At

I'm trying to understand what is happening with Console.ReadKey() versus Console.ReadKey(true). I understand that including true will prevent the key from being displayed to the console, but there is some odd behavior produced when also using Console.Clear(); I should say that this C# code is being compiled and run on a Pixel C (android) tablet. I don't know if it behaves the same on Windows.


using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;

namespace CSharp_Shell
{

    public static class Program 
    {
        public static void Main() 
        {
           string[] str = new String[5] {"one","two","three","four","five"};
           foreach(string s in str)
           {
               Console.WriteLine(s);
           }
           Console.ReadKey(true);
           Console.Clear();
           foreach(string s in str)
           {
               Console.WriteLine(s);
           }
        }
    }
}

When executed, this console will display...

one
two
three
four
five

...after which I can press a key, clearing the console, and displaying the text again.

However, if I change Console.ReadKey(true); to Console.ReadKey(); then the execution produces the initial text as expected, and after pressing a key only displays...

one
two

Finally, running the code in the two ways described above but with the additional change of removing the Console.Clear(); line results in all the text being displayed as expected (without the screen clearing), with the difference being that when using Console.ReadKey(); any displayable key pressed is also written to the console (which I would expect).

0

There are 0 best solutions below