Hola, la mejor forma es haciendo uso de la apide windows, hace un triempo tuve que implementar muchas funciones de consola para un proyeco que tuve, asi que he extraido este pedacito, ojala te sirva.
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->
using System.Runtime.InteropServices;
...
...
[DllImport("kernel32", SetLastError=true)]
static extern bool GetConsoleMode(IntPtr handle, out uint mode);
[DllImport("kernel32", SetLastError=true)]
static extern bool SetConsoleMode(IntPtr handle, uint mode);
...
...
static readonly IntPtr STD_INPUT_HANDLE = new IntPtr(-10);
private IntPtr hConsoleHandle;
const uint ENABLE_LINE_INPUT = 2;
const uint ENABLE_ECHO_INPUT = 4;
uint modo, nmodo;
...
...
public constructor()
{
hConsoleHandle = GetStdHandle(STD_INPUT_HANDLE);
GetConsoleMode(hConsoleHandle, out modo);
nmodo = modo & ~(ENABLE_LINE_INPUT |ENABLE_ECHO_INPUT);
SetConsoleMode(hConsoleHandle, nmodo);
}
~constructor()
{
SetConsoleMode(hConsoleHandle, modo);
}
public int LeerTecla()
{
int ret;
SetConsoleMode(hConsoleHandle, modo);
ret = Console.Read();
SetConsoleMode(hConsoleHandle, nmodo);
return ret:
}<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->