У меня есть следующий код, который предоставляет функцию автоматического обновления для консольного приложения WCF.
Когда Console.ReadKey принимает недопустимый символ, он перезапускает метод ReadKey. Если пользователь нажимает на клавиатуру достаточно долго для этого кода, он переходит в StackOverflowException.
У кого-нибудь есть способ переписать этот код, чтобы он не вызывал перегрузку стека?
[STAThread]
static void Main(string[] args)
{
bool restart = true;
while(restart)
{
using (var myWcfHost = new MyWcfHost())
{
myWcfHost.start();
Console.WriteLine("Press Enter to quit or Ctrl+R to restart");
restart = WaitForRestart();
}
}
}
private static bool WaitForRestart()
{
// clear users input
Console.CursorLeft = 0;
Console.Write(' ');
Console.CursorLeft = 0;
// read users input
var key = Console.ReadKey();
if ((key.Modifiers & ConsoleModifiers.Control) != 0
&& key.Key == ConsoleKey.R)
{
// refersh the settings
ConfigurationManager.RefreshSection("appSettings");
return true;
}
if (key.Key == ConsoleKey.Enter || key.Key == ConsoleKey.Escape)
{
return false;
}
return WaitForRestart();
}