Anche se la discussione è vecchia aggiungo un risposta per futuri lettori.
La soluzione con while(true) non va bene, tutto il codice all'esterno è NON ESEGUIBILE perchè non c'è modo di poter raggiungere quelle righe durante l'esecuzione. Il nostro amico dice di voler fermare quando dice lui, ma non ha modo.
Benchè non ami assolutamente i cicli pseudo infiniti while(...) nel main, piuttosto li utilizzo come dirò tra un attimo, consiglio di inserirli sempre in thread o task paralleli. Fermare il codice main in una classe specifica non è molto elegante.
Tornando al codice "non eseguibile" prova così:
public bool exitFlag = true;
while (exitFlag)
{
//fa qualcosa
}
Console.WriteLine("codice seguente");
A questo punto da "altrove", e qui sta il fatto che se metti tutto a giro di main non puoi intervenire, dovresti impostare exitFlag a false e il while termina.
Per il compilatore questa è una eventualità "possibile" quindi non dirà che il codice seguente è irraggiungibile.
E' ovvio che questa è una cosa a "grandi linee", solo per capire il perchè il compilatore risponde così.