У меня есть следующий код, который предоставляет функцию автоматического обновления для хостингового приложения WCF Console.Как предотвратить ошибку StackOverflow в следующем коде?
Когда 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();
}
Я смотрел на это навсегда, наконец решил отправить сообщение, и я подумал об этом сразу после того, как отправил. Спасибо, это работает. – bendewey