¿Cómo crear un menú de navegación en la aplicación dotnet?
He creado una aplicación de consola que tiene un menú que me permite navegar entre los elementos del menú. Manejo la lógica de navegación en este método:
public virtual void updateMenu()
{
switch (Console.ReadKey(true).Key)
{
case ConsoleKey.UpArrow:
{
if (cursor > 0)
{
cursor--;
Console.Clear();
drawWithHeader();
}
}
break;
case ConsoleKey.DownArrow:
{
if (cursor < (menuItemList.Count - 1))
{
cursor++;
Console.Clear();
drawWithHeader();
}
}
break;
case ConsoleKey.Escape:
{
if (ParentMenu != null)
{
hideMenu();
}
}
break;
case ConsoleKey.Enter:
{
Console.Clear();
drawHeader();
Console.CursorVisible = true;
menuItemList[cursor].Action();
Console.CursorVisible = false;
Console.Clear();
drawWithHeader();
}
break;
default:
{
// Unsuported key. Do nothing....
}
break;
}
}
Ahora en Windows todo funciona bien, pero cuando ejecuto esta aplicación en mi Linux consystemd
Yo obtengo
Excepción no controlada: System.InvalidOperationException: no se puede leer la clave cuando alguna de las aplicaciones no tiene una consola o cuando la entrada de la consola se ha redirigido. Prueba Console.Read.
La pantalla de stacktrace:
at System.ConsolePal.ReadKey(Boolean intercept)
at System.Console.ReadKey();
at AppRazen.Menu.ConsoleMenu.UpdateMenu();
Después de algunas búsquedas descubrí que este problema está relacionado con laReadKey()
l método @ no es totalmentecompatible con linux. Y la solución propuestaaqu simplemente no funciona en mi caso, porque el usuario ha usadoOminSharp
.
También intenté establecerReadKey(false)
pero esto no solucionó el problema, y también traté de manejar todas las cosas dentro deUpdateMenu
conConsole.Read()
pero la consola parece atascada.
Tenga en cuenta que este problema solo ocurrirá cuando ejecute mi script en el supervisor de Linux no con el comando predeterminado comodotnet AppRazen.dll
Esencialmente estoy ejecutando el script con unasystemd
servicio como este:
[Unit]
Description = Daemon description
[Service]
ExecStart = /usr/bin/dotnet /home/root/Desktop/publish/AppRazen.dll
WorkingDirectory= /home/root/Desktop/publish
Restart = always
RestartSec = 3
[Install]
WantedBy = multi-user.target
Sinceramente, no sé cómo puedo solucionarlo. Alguien tiene alguna idea?
Gracias por adelantado